每次轮询使用 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()
.
中实现这样的逻辑
我想轮询 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()
.