Cho*_*hop 12 java transactions spring-batch
我想了解有关Spring批处理中数据流的一些信息,但未能在Internet上找到我要查找的内容(尽管本网站上有一些有用的问题).
我正在尝试建立在我们公司使用Spring Batch的标准,我们想知道当一个步骤中的多个处理器更新不同数据源上的数据时,Spring Batch的行为如何.
这个问题集中在一个分块的过程,但随时提供有关其他模式的信息.
从我所看到的(如果我错了请纠正我),当读取一行时,它会在读取下一行之前跟随整个流程(读取器,处理器,写入器)(而不是读取器处理的孤岛处理)所有行,将它们发送到处理器,等等).
在我的例子中,几个处理器读取数据(在不同的数据库中)并在此过程中更新它们,最后写入器将数据插入到另一个DB中.目前,JobRepository没有链接到数据库,但这将是一个独立的,使得事情仍然有点复杂.
由于数据属于多个业务领域,因此无法更改此模型.
在这种情况下如何管理交易?只有处理完整块后才提交数据吗?那么,是否存在两阶段提交管理?如何确保?应该进行哪些开发或配置以确保数据的一致性?
更一般地说,在类似情况下,您的建议是什么?
Spring Batch 使用 Spring 核心事务管理,大部分事务语义围绕一组项目排列,如Spring Batch 文档5.1 节中所述。
读取器和写入器的事务行为完全取决于它们是什么(例如文件系统、数据库、JMS 队列等),但如果资源配置为支持事务,那么它们将被 spring 自动登记。XA 也是如此 - 如果您使资源端点符合 XA,那么它将利用两阶段提交。
回到块事务,它将在块的基础上设置一个事务,因此如果您在给定的tasklet上将提交间隔设置为5,那么它将打开和关闭一个新事务(包括事务管理器管理的所有资源)设定的读取次数(定义为提交间隔)。
但是所有这些都是围绕从单个数据源读取数据而设置的,这满足您的要求吗?我不确定 Spring Batch 是否可以管理一个事务,它从多个源读取数据并在单个事务中将处理器结果写入另一个数据库。(事实上我想不出有什么可以做到这一点......)
| 归档时间: |
|
| 查看次数: |
3521 次 |
| 最近记录: |