spring-boot-starter-jta-atomikos 实践

spring-boot-starter-jta-atomikos in practise

我正尝试在我的 spring 启动应用程序中使用 Atomikos 进行分布式事务处理。它将与两个数据库进行交互。

我找到了一个 example in which the author uses Atomicos. Starting with version 1.2 spring boot supports Atomicos。

我有几个问题:

  1. 如果应用程序具有 spring-boot-starter-jta-atomikos 依赖项,可以删除 example 配置的哪一部分?
  2. 当应用程序只对一个数据库执行操作时会发生什么?即我是否需要一些额外的东西来指定哪些交易应该分发,哪些是本地的,或者它会被自动检测到吗?在这种情况下,我想避免开销。

谢谢!

Spring Boot 将为您自动配置 JtaTransactionManager 并将其正确绑定到您的实体管理器或 JMS 消息侦听器(如果有)。查看 the documentation 了解更多详情。一种安全的开始方式是根本不编写任何配置,并通过属性或自定义配置查看您需要自定义的内容。

话虽这么说,Spring Boot 没有对多个数据库的自动配置支持。如果你想配置一个有两个数据库的项目,你必须自己做; this sample project 向您展示了如何使用 JPA 和本地事务管理器来做到这一点。根据您引用的示例,您可以使用 Atomikos 轻松地将它移植到 JTA。

您不能在运行时更改事务管理器(即基于您的 线程 仅使用一个数据库这一事实)。我猜想事务管理器本身对这种情况有优化,如果不需要的话,不是 运行 一个完整的 2PC。