【问题标题】:Spring Chained Transaction Manager versus AtomikosSpring 链式事务管理器与 Atomikos
【发布时间】:2020-08-14 11:56:44
【问题描述】:
【问题讨论】:
标签:
java
spring-boot
spring-data-jpa
jta
atomikos
【解决方案1】:
使用 Atomikos 是一个更好的整体解决方案。 ChainedTransactionManager 在某些情况下可以使用。它所做的假设在 javadocs 中有说明:
PlatformTransactionManager 实现,用于协调事务创建、提交和回滚到委托列表。使用此实现假定导致事务回滚的错误通常发生在事务完成之前或最内部的 PlatformTransactionManager 提交期间。
配置的实例将按照给定的顺序启动事务并以相反的顺序提交/回滚,这意味着最有可能中断事务的 PlatformTransactionManager 应该是配置列表中的最后一个。在提交期间抛出异常的 PlatformTransactionManager 将自动导致剩余的事务管理器回滚而不是提交。
ChainedTransactionManager 仍然存在提交一项事务而另一项失败的机会。
在两个数据库上使用 Atomikos 是一个真正的分布式事务all or nothing。但这也会产生一些影响应用程序支持的后果,例如,当 TX 在一个数据库上完全提交并在另一个数据库上准备好时,此时应用程序崩溃。您需要确保您的应用程序可以从这种情况中恢复。通常,当应用重新启动时,TX 会在第二个 DB 上完全提交,但这可能不会发生。
那么哪一个是正确的?视情况而定。