Spring Global事务与本地事务

18b*_*tes 12 java spring transactions distributed-transactions spring-transactions

阅读Spring事务文档时,我发现它支持全局事务和本地事务.

  • 简单来说,什么是全局事务,什么是本地事务?
  • 一个优于另一个的优点是什么?它们的适当用途是什么?

如果我使用以下配置 - 它是否意味着它是本地事务?

<tx:annotation-driven transaction-manager="transManager" />

<bean id="transManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="emf" />
</bean>
Run Code Online (Sandbox Code Playgroud)

我尝试在Google和Stackoverflow中搜索,但没有得到任何资源解释相同的简单术语.

Ser*_*hiy 16

实际上有很多资源可以回答你的前两个问题,例如Spring Documentation解释了本地和全球交易是什么,并描述了他们在9.2动机中的不同之处.简而言之:

全局事务是一个应用程序服务器管理的事务,允许使用不同的事务资源(这可能是两个不同的数据库,数据库和消息队列等)

本地事务是特定于资源的事务(例如Oracle事务),而应用程序服务器与它们无关.(同一章解释了他们每个人的优点和缺点,然后我可以解释得更好,所以我建议你仔细看看)

回答你以后的问题.该文件说,JpaTransactionManager能够为全球处理事务,所以通过看片的呈现代码很难说,如果是本地或全局事务.相同的文档说明DataSourceTransactionManager应该使用本地单一资源事务.

  • Serhiy 提供的答案有错误。在最后一段中,他在提到 JpaTransactionManager 时指出了 JtaTransactionManager 的文档。正确地说,JtaTransactionManager 是全局的,而 JpaTransactionManager 不是。请更正答案,以免混淆未来的读者。https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/orm/jpa/JpaTransactionManager.html (4认同)
  • 全局事务是否与XA事务相同? (3认同)
  • 差不多了。JpaTransactionManager 不是全局管理器,它是本地管理器。JtaTransactionManager 是。 (2认同)