JdbcPollingChannelAdapter:仅手动轮询数据库

时间:2017-04-27 09:53:01

标签: spring-integration

我有一个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();
}

1 个答案:

答案 0 :(得分:1)

嗯,您对JdbcPollingChannelAdaptercommandChannel采取了正确的方法,但是您没有像SourcePollingChannelAdapter那样配置IntegrationFlows.from(jdbcMessageSource()

您需要的是jdbcMessageSource(),但要手动轮询,您应该配置基于命令的流程:

@Bean
public IntegrationFlow jdbcFlow() {
    return IntegrationFlows
            .from("commandChannel")
            .handle(jdbcMessageSource(), "receive")
            .handle(System.out::println)
            .get();
}

正好在时间基础上从receive()调用SourcePollingChannelAdapter