2014-01-21 54 views
1

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

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

+0

你能解释一下为什么不把事务用于你的情况?如果会出现一些错误,在DB的任何更改将rollbacked –

+0

_those行不会被重新读取,当应用程序回来up_ 那是什么意思? – IRus

回答

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,并且不会再被读取一次。

相关问题