Spring Integration JDBC入站通道适配器 - 避免重复读取

时间:2014-01-21 16:19:25

标签: spring-batch spring-integration

我有一个从数据库中读取的Spring Integration jdbc:inbound-channel-adapter。一个重要的要求是不会读取相同的行两次。一种可能的方法是使用update属性在使用与query属性相同的where子句读取的行上设置标志。然而,问题是如果在工作流中进一步发生异常(使用行映射器转换结果集,编组为XML,然后放置外部系统的出站队列),那些行将不会被重新读取当应用程序恢复时。在这种情况下使用Spring Integration是否有更好的策略?

另一个问题是,鉴于上述要求,Spring Batch会提供更强大的解决方案,如果是这样,它将如何实施? 感谢

1 个答案:

答案 0 :(得分:0)

看起来你应该使用short TX and channel shift技术:

<int-jdbc:inbound-channel-adapter channel="executorChannel"/>

<int:channel id="executorChannel">
    <int:dispatcher task-executor="executor"/>
</int:channel>

将您的消息转移到JDBC TX之外的不同线程。最后一个将永远提交。因此,任何downstrem问题都不会影响您在DB中的行 - 它们将被标记为processed,并且不会再被读取。