【问题标题】:JDBC Inbound Adapter retrieving only one record rather than allJDBC 入站适配器仅检索一条记录而不是全部
【发布时间】:2018-12-05 21:15:06
【问题描述】:

我正在使用以下检索消息的 jdbc 入站适配器。还有另一个激活器监视通道并调用方法。然而问题是,服务激活器只得到一个“事件”而不是全部。但是,查询应该是“选择 *”

<int-jdbc:inbound-channel-adapter id="jdbcInboundAdapter"
                                 channel="queueChannel" data-source="datasource"
                                 auto-startup="true"
                                 query="SELECT * FROM Event" row-mapper="eventResultMapper"
                                 update-per-row="false">

    <int:poller fixed-rate="5000">
    </int:poller>
</int-jdbc:inbound-channel-adapter>

<int:service-activator input-channel="queueChannel" ref="eventActivator" method="doSomething">
</int:service-activator>

我也尝试在适配器中添加 max-rows="0",但这没有帮助。

【问题讨论】:

  • 也许您的eventResultMapper 只返回cursom 中的第一项?您能否为org.springframework.integration 类别打开DEBUG 以查看JdbcPollingChannelAdapter 产生什么以及如何产生
  • 我进一步调试了它。创建 ServiceActivatingHandler 时 canProcessMessageList 的值为 false。因此,服务激活器只接收一个事件而不是列表。激活器如下所示: public void doSomething(Event event){ System.out.println("Processing event: " + event.getName());我可以看到 queueChannel 上有 4 条消息。如何将其设置为 true,以便激活器接收所有 4 条消息。

标签: spring-integration spring-integration-dsl


【解决方案1】:

经过进一步调试,发现创建ServiceActivatingHandler时canProcessMessageList的值为false。因此,服务激活器只接收一个事件而不是列表。

这就是我的激活器的样子:

public void doSomething(Event event)
{
  System.out.println("Processing event: " + event.getName());
}

更新了具有以下签名的激活器并且它起作用了:

public void doSomething(Collection<Event> events){
    System.out.println("Processing event: " + events.size());
    for (Event event: events){
        System.out.print("***** " + event.getName());
    }
}

【讨论】:

  • 很高兴您自己解决了这个问题!您现在可以接受自己的答案了。
  • 谢谢阿特姆。所以说我不能接受 2 天。
  • 没关系。请记住,这将对 SO 上的其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
相关资源
最近更新 更多