Spring Integration DSL JDBC入站通道适配器

时间:2016-05-30 12:03:18

标签: java spring-integration spring-jdbc spring-dsl

我使用spring集成从数据库中读取数据。 现在我使用轮询适配器

@Bean
public MessageSource<Object> jdbcMessageSource() {
   JdbcPollingChannelAdapter a = new JdbcPollingChannelAdapter(dataSource(), "SELECT id, clientName FROM client");
   return a;
}

流速:

@Bean
public IntegrationFlow pollingFlow() throws Exception {
    return IntegrationFlows.from(jdbcMessageSource(), 
                c -> c.poller(Pollers.fixedRate(30000).maxMessagesPerPoll(1)))
            .channel(channel1())
            .handle(handler())
            .get();
}

但我想从其他系统安排流量。 有谁知道怎么做?

2 个答案:

答案 0 :(得分:1)

  

从其他系统安排我的流量

从您的流量角度来看,它听起来像event driven action。为此,您应该将JdbcOutboundGatewaySELECT。{/ p>相同

当然,您应该找到该外部系统的挂钩来触发流输入通道的事件。这可能是任何入站通道适配器或消息驱动适配器,例如JMS,AMQP,HTTP等。取决于您在中间件中已有的内容,以及从您的应用程序向外部系统公开的内容。

答案 1 :(得分:0)

我认为我使用自定义触发器来解决问题:

public Trigger onlyOnceTrigger() {
       return new Trigger() {
              private final AtomicBoolean invoked = new AtomicBoolean();
              @Override
              public Date nextExecutionTime(TriggerContext triggerContext) {
                    return this.invoked.getAndSet(true) ? null : new Date();
              }
       };
}

我的流程:

public IntegrationFlow pollingFlow() throws Exception {
    return IntegrationFlows.from(jdbcMessageSource(), 
                c -> c.poller(Pollers.trigger(onlyOnceTrigger()).maxMessagesPerPoll(1)))
            .channel(channel1())
            .handle(handler())
            .get();
}