Java Spring批处理如何管理事务(可能有多个数据源)?
我想要一些关于Spring批处理中的数据流的信息,但是在互联网上找不到我想要的(尽管在这个网站上) 我正试图在我们公司建立使用SpringBatch的标准,我们想知道当一个步骤中的多个处理器更新不同数据源上的数据时,SpringBatch的行为如何 这个问题的重点是一个分块的过程,但请随意提供其他模式的信息 据我所见(如果我错了,请纠正我),当一行被读取时,它在下一行被读取之前遵循整个流程(读卡器、处理器、写入器)(与思洛存储器处理相反,在思洛存储器处理中,读卡器将处理所有行,将它们发送给处理器,等等) 在我的例子中,几个处理器读取数据(在不同的数据库中)并在过程中进行更新,最后写入程序将数据插入另一个数据库。目前,JobRepository没有链接到数据库,但这将是一个独立的数据库,这使得事情仍然有点复杂 此模型无法更改,因为数据属于多个业务领域 在这种情况下,如何管理事务?是否只有在处理完整个数据块后才提交数据?然后,是否有两阶段提交管理?如何确保?应进行哪些开发或配置以确保数据的一致性Java Spring批处理如何管理事务(可能有多个数据源)?,java,transactions,spring-batch,Java,Transactions,Spring Batch,我想要一些关于Spring批处理中的数据流的信息,但是在互联网上找不到我想要的(尽管在这个网站上) 我正试图在我们公司建立使用SpringBatch的标准,我们想知道当一个步骤中的多个处理器更新不同数据源上的数据时,SpringBatch的行为如何 这个问题的重点是一个分块的过程,但请随意提供其他模式的信息 据我所见(如果我错了,请纠正我),当一行被读取时,它在下一行被读取之前遵循整个流程(读卡器、处理器、写入器)(与思洛存储器处理相反,在思洛存储器处理中,读卡器将处理所有行,将它们发送给处理器
更一般地说,在类似的情况下,您的建议是什么?Spring批处理使用Spring核心,大多数事务语义围绕项目块进行安排,如第5.1节所述 读写器的事务行为完全取决于它们是什么(例如文件系统、数据库、JMS队列等),但是如果资源配置为支持事务,那么spring将自动登记它们。XA也是如此-如果您使资源端点与XA兼容,那么它将使用2阶段提交 回到区块事务,它将在区块的基础上设置一个事务,因此如果您在给定的tasklet上将提交间隔设置为5,那么它将根据设置的读取次数(定义为提交间隔)打开和关闭一个新事务(包括事务管理器管理的所有资源)
但所有这些都是围绕从单个数据源读取数据而设置的,这是否满足您的要求?我不确定SpringBatch是否能够管理一个事务,它从多个源读取数据,并在单个事务中将处理器结果写入另一个数据库。(事实上,我想不出有什么能做到这一点……谢谢你的回答。我们将不得不面对多个数据库的情况(每个业务部门都有自己的数据库,我们有时需要访问多个业务元素)。不过这些都是有用的元素。是的,我在考虑这个问题,你必须对它进行结构化,使事件来自单个源,流程步骤可能会查询各种数据库(这将发生在已建立的事务中),然后更新目标数据库。或者让某个东西聚合来自不同生产者的事件,然后让一个处理器实际执行更新。