我想要一些关于Spring批处理中的数据流的信息,但未能找到我在互联网上寻找的内容(尽管这个网站上有一些有用的问题)。
我试图在我们公司建立使用Spring Batch的标准,我们想知道当几个处理器在一个步骤中更新不同数据源上的数据时,Spring Batch的行为。
这个问题关注的是分块过程,但也可以提供其他模式的信息。
从我所看到的(如果我错了请纠正我),当读取一行时,在读取下一行之前,它遵循整个流程(阅读器,处理器,写入器)(与筒仓处理相反,阅读器将处理所有行,将它们发送给处理器,等等)。
在我的例子中,几个处理器读取数据(在不同的数据库中)并在进程中更新它们,最后写入器将数据插入到另一个数据库中。目前,JobRepository还没有链接到数据库,但这将是一个独立的数据库,这使得事情仍然有点复杂。
此模型不能更改,因为数据属于多个业务领域。
在这种情况下事务是如何管理的?是否只在处理完整个chunk后才提交数据?然后,是否有两阶段提交管理?如何保证?为了确保数据的一致性,应该进行哪些开发或配置?
更一般地说,在类似的情况下,您的建议是什么?
Spring批处理使用Spring的核心事务管理,大部分事务语义围绕着一个项目块排列,如Spring批处理文档的5.1节所述。
读写器的事务行为完全取决于它们是什么(例如文件系统、数据库、JMS队列等),但是如果资源被配置为支持事务,那么它们将被spring自动征调。对于XA也是如此——如果您使资源端点符合XA,那么它将为它使用2阶段提交。
回到块事务,它将在块基础上建立一个事务,所以如果你在给定的微线程上设置提交间隔为5,那么它将为设置的读次数(定义为提交间隔)打开和关闭一个新的事务(包括事务管理器管理的所有资源)。
但是所有这些都是围绕从单个数据源读取设置的,这满足您的要求吗?我不确定spring批处理是否可以管理一个事务,它从多个数据源读取数据,并将处理器结果写入单个事务中的另一个数据库。(事实上,我想不出有什么能做到这一点…)