Spring Chained Transaction Manager与Atomikos

问题描述

嗨,我有分布式交易,我必须以某种方式对其进行管理

另一方面,在春季生态系统中,ChainedTransactionManager可以做到这一点,而在春季文档中,Atomikos可以用于分布式事务

https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-jta.html

我应该使用哪个?我宁愿留在spring图书馆中,但Atomikos远不止spring交易管理器?如果有人同时使用它们,可以比较优缺点

解决方法

使用Atomikos是更好的整体解决方案。在某些情况下,可以使用ChainedTransactionManager。所做的假设在javadocs中进行了说明:

PlatformTransactionManager实现,用于协调事务的创建,提交和回滚到委托列表。使用此实现方式假设,导致事务回滚的错误通常会在事务完成之前或最内部的PlatformTransactionManager提交期间发生。

配置的实例将按照给定的顺序启动事务,并以相反的顺序提交/回滚,这意味着最有可能中断事务的PlatformTransactionManager应该是配置列表中的最后一个。在提交过程中,PlatformTransactionManager抛出异常将自动导致其余事务管理器回滚而不是提交。

使用ChainedTransactionManager仍然可以提交一项事务,而另一项失败。

在两个数据库上,使用Atomikos都是真正的分布式事务,全部或全部。但是,这也会产生一些影响应用程序支持的后果,例如,当TX在一个DB上完全提交并在另一个DB上准备好时,此时应用程序崩溃。您需要确保您的应用程序可以从这种情况下恢复。通常,重新启动应用程序后,TX将在第二个DB上完全提交,但这可能不会发生。

那么哪一个是正确的呢?这取决于。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...