每次轮询使用 JpaPollingChannelAdapter 时,为 NamedQuery 参数设置不同的值

set different values for NamedQuery parameters when using JpaPollingChannelAdapter for each polling

我想轮询 table 一些固定延迟,我想 select 上次轮询后创建的所有行。我在这里尝试使用 spring-integration-jpa,但在大多数示例代码中,select 行使用类似布尔值的列条件。

这是spring-集成配置代码

@Configuration
@EnableIntegration
public class PollerConfiguration {

    @Autowired
    private EntityManager entityManager;

    @Payload
    private JpaExecutor getExecutor(){
        JpaExecutor executor = new JpaExecutor(this.entityManager);
        executor.setEntityClass(ChangeRecord.class);
        executor.setNamedQuery("ChangeRecord.findAllAfterLastPolled");
        //todo some magic here

        return executor;
    }

    @Bean
    @InboundChannelAdapter(value = "changeRecordChannel", poller = @Poller(fixedDelay = "10000"))
    public MessageSource<?> jpaInbound() {
        JpaPollingChannelAdapter adapter = new JpaPollingChannelAdapter(this.getExecutor());
        return adapter;
    }
}

,这是命名查询

@NamedQuery(
        name = "ChangeRecord.findAllAfterLastPolled",
        query="select r from ChangeRecord r where r.changeDt > :lastPolled")
public class ChangeRecord implements Serializable {

我想知道有什么方法可以在每次轮询器进行轮询时为 :lastPolled 设置动态值。

JpaExecutor:

/**
 * Specify the {@link ParameterSource} that would be used to provide
 * additional parameters.
 * @param parameterSource Must not be null.
 */
public void setParameterSource(ParameterSource parameterSource) {

所以,如果你有一些状态来获取那个 lastPolled 值,你可以在 hasValue()/getValue().

中实现这样的逻辑