使用 spring 框架配置跨多个资源的事务?

Configuring transaction across multiple resources using spring framework?

我理解跨多个事务资源的事务称为全局事务。

问题一: 这只是分布式事务的别名还是有所不同?

问题二: 已阅读 spring 关于事务管理的文档。 我可以从中推断出的是 一个。 JTA 纯粹是为分布式事务设计的。 b.只有通过 EJB 和 EJB CMT,我们才能执行分布式事务。 C。如果是 EJB,则它需要一个应用程序服务器并间接使用 JNDI。

促进global/distributed交易的Spring对应方是什么?

问题三: 如果我们不想使用具有 JTA 功能的应用服务器, 我们应该像独立的事务管理器一样使用 Atomikos / JOTM 来执行全局事务吗?

问题四: 在单个事务下更新 Table A in DB_1 (MySql) 和 Table B in DB_2 (Oracle) 的简单用例: Spring 对此用例的回答是什么?

  1. a) 不,不是每笔交易都会被分发,只有当涉及多个资源时才会分发。 TM 负责管理在相关资源上执行的事务
  2. b) 不,在 ejb 服务器之外可以使用事务管理器,如 atomikos、bitronix 等,但我不确定你所说的强制执行是什么意思,正如我之前所写,必要时使用分布式事务。
  3. c) 是
  4. d) Springs counterpart
  5. 如果您想同时在多个资源上使用事务是。
  6. 您以某种方式定义了两个数据源,它们让 TM 处理它们的资源。 MySql 和 Oracle 都提供 XA-Datasources,使其能够处理分布式事务。您定义一个 TM 并使使用事务属性注释您的 bean 成为可能。有很多教程展示了如何做到这一点。

补充说明:

  1. 同时交易也包含在 CDI-Spec 中。所以你也可以使用CDI。
  2. 明智地处理分布式事务。双向提交使得设置合理的事务超时几乎是不可能的。有些开发站点在必要时仅在一个 SQL-DBMS-Resource 和一个 JMS-Resource 之间使用分布式事务。