使用Spring Integration JDBC无需轮询即可从数据库检索数据

时间:2019-01-21 17:12:58

标签: spring jdbc spring-integration integration

当前正在学习spring集成,我想从MySQL数据库中检索信息以在int:service-activatorint:splitter中使用。

不幸的是,似乎大多数示例和文档都基于使用int-jdbc:inbound-channel-adapter的想法,而int:gateway本身就需要一个轮询器。我不想轮询数据库,而是根据源自int-jdbc:outbound-gateway的现有消息的有效负载来检索特定数据。然后,这些数据将用于进一步修改有效负载,或帮助拆分消息。

根据说明,我尝试使用int-jdbc:outbound-gateway

  

... jdbc.JdbcOutboundGateway',用于更新数据库以响应请求通道上的消息,和/或从数据库中检索数据...

这意味着它仅可用于检索数据,而不仅用于更新,而且在我实现它时,有人抱怨至少需要一条更新语句:

Update required for outbound-gateway

所以我目前正坐在一个看起来像这样的有缺陷的原型上:

Start of integration-context diagram

带圆圈的部分是无效的incomingGateway

我的最终目标是根据来自analyzerSplitter的有效负载(如上图所示),从MySQL数据库中检索一些信息,并使用该数据在{{1}中拆分消息。 },或使用int:service-activator修改有效负载。然后,所有这些都应该链接到一个int-jdbc:message-store上,我认为它可以帮助提高性能。我不想定期轮询数据库,也不想更新数据库中的任何内容。

通过使用轮询int-jdbc:inbound-channel-adapter进行测试,我相信我的数据源bean设置正确并且查询可以执行。

我该如何在spring集成中正确设置这种行为?

1 个答案:

答案 0 :(得分:0)

如果要在更新数据库后继续该流程,则可以在服务激活器调用的方法中简单地使用JdbcTemplate,或者如果在流程结束时使用{{3 }}。

  

出站通道适配器与入站通道相反:其作用是处理消息并使用它执行SQL查询。默认情况下,消息有效负载和标头可用作查询的输入参数,如以下示例所示:

     

...