我有一个JdbcPollingChannelAdapter,它通过JDBC读取数据。我想手动进行轮询(使用commandChannel)。它永远不应该自动轮询,它应该在我触发手动轮询时立即运行。
下面我正在使用一个每24小时运行一次的轮询器来完成通道的运行。我不能使用永远不会像Quartz: Cron expression that will never execute那样触发的cronExpression,因为Pollers.cronExpression()不需要一年。
@Bean
public MessageSource<Object> jdbcMessageSource() {
return new JdbcPollingChannelAdapter(this.dataSource, "SELECT...");
}
@Bean
public IntegrationFlow jdbcFlow() {
return IntegrationFlows
.from(jdbcMessageSource(),
spec -> spec.poller(
Pollers.fixedRate(24, TimeUnit.HOURS)))
.handle(System.out::println)
.get();
}
答案 0 :(得分:1)
嗯,您对JdbcPollingChannelAdapter
和commandChannel
采取了正确的方法,但是您没有像SourcePollingChannelAdapter
那样配置IntegrationFlows.from(jdbcMessageSource()
。
您需要的是jdbcMessageSource()
,但要手动轮询,您应该配置基于命令的流程:
@Bean
public IntegrationFlow jdbcFlow() {
return IntegrationFlows
.from("commandChannel")
.handle(jdbcMessageSource(), "receive")
.handle(System.out::println)
.get();
}
正好在时间基础上从receive()
调用SourcePollingChannelAdapter
。