gpt4 book ai didi

java - Spring Batch 如何管理事务(可能有多个数据源)?

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:53 25 4
gpt4 key购买 nike

我想要一些有关 Spring Batch 处理中的数据流的信息,但无法在 Internet 上找到我要找的东西(尽管本网站上有 some useful questions)。

我正在尝试建立在我们公司使用 Spring Batch 的标准,我们想知道当多个处理器在一个步骤中更新不同数据源上的数据时 Spring Batch 的行为如何。

这个问题侧重于分 block 过程,但请随时提供有关其他模式的信息。

据我所见(如果我错了请纠正我),当一行被读取时,它会在读取下一行之前遵循整个流程(读取器、处理器、写入器)(而不是筒仓处理,其中阅读器将处理所有行,将它们发送到处理器,依此类推。

在我的例子中,几个处理器读取数据(在不同的数据库中)并在此过程中更新它们,最后写入器将数据插入到另一个数据库中。目前,JobRepository 没有链接到数据库,但那将是一个独立的数据库,这使得事情仍然有点复杂。

此模型无法更改,因为数据属于多个业务领域。

在这种情况下如何管理事务?数据是否仅在处理完整个 block 后才提交?然后,是否有两阶段提交管理?它是如何保证的?需要做哪些开发或配置才能保证数据的一致性?

更一般地说,在类似情况下您的建议是什么?

最佳答案

Spring Batch使用Spring核心transaction management ,大多数事务语义围绕一大块项目排列,如第 5.1 节中所述 of the Spring Batch docs .

读取器和写入器的事务行为完全取决于它们是什么(例如文件系统、数据库、JMS 队列等),但是如果资源配置为支持事务,那么它们将被 spring 自动登记。 XA 也是如此 - 如果您使资源端点符合 XA,那么它将使用两阶段提交。

回到 block 事务,它将在 block 的基础上设置一个事务,所以如果你在给定的 tasklet 上将提交间隔设置为 5,那么它将打开和关闭一个新事务(包括由 tasklet 管理的所有资源)事务管理器)为设置的读取次数(定义为提交间隔)。

但是所有这些都是围绕从单个数据源读取而设置的,这是否满足您的要求?我不确定 spring batch 是否可以管理一个事务,它从多个源读取数据并将处理器结果写入单个事务中的另一个数据库。 (事实上​​我想不出有什么可以做到的……)

关于java - Spring Batch 如何管理事务(可能有多个数据源)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com