我有一个从数据库中读取的Spring Integration jdbc:inbound-channel-adapter
。一个重要的要求是不会读取相同的行两次。一种可能的方法是使用update
属性在使用与query
属性相同的where子句读取的行上设置标志。然而,问题是如果在工作流中进一步发生异常(使用行映射器转换结果集,编组为XML,然后放置外部系统的出站队列),那些行将不会被重新读取当应用程序恢复时。在这种情况下使用Spring Integration是否有更好的策略?
另一个问题是,鉴于上述要求,Spring Batch会提供更强大的解决方案,如果是这样,它将如何实施? 感谢
答案 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
,并且不会再被读取。