全局事务怎么做呢?
JPA.getUserTransaction().begin(); 首先要全局事务的API,不需要我们编写,通常容器已经提供给我们了,
我们只需要begin一下
connection = mysql 连接mysql
connection2 = oracle 连接oracle
connection--> update mysql_table set amount=amount-xx where id=aaa 发生扣钱,假设是在mysql数据
库扣钱的。
connection2--> update oracle_table set amount=amount+xx where id=bbb 发生在oracle数据库
JPA.getUserTransaction().commit();
那么它是怎么知道事务该提交还是回滚呢?
这时候它使用了二次提交协议。二次提交协议简单说就这样:如果你先执行第一条语句,执行的结果先预提交
到数据库,预提交到数据库了,数据库会执行这条语句,然后返回一个执行的结果,这个结果假如我们用布尔
值表示的话,成功就是true,失败就是false.然后把执行的结果放入一个(假设是List)对象里面去,接下来再
执行第二条语句,执行完第二条语句之后(也是预处理,数据库不会真正实现数据的提交,只是说这条语句送
到数据库里面,它模拟下执行,给你返回个执行的结果),假如这两条语句的执行结果在List里面都是true的
话,那么这个事务就认为语句是成功的,这时候全局事务就会提交。 二次提交协议,数据库在第一次提交这个
语句时,只会做预处理,不会发生真正的数据改变,当我们在全局事务提交的时候,这时候发生了第二次提
交,那么第二次提交的时候才会真正的发生数据的改动。
如果说在执行这两条语句中,有一个出错了,那么List集合里就有个元素为false,那么全局事务就认为你这
个事务是失败的,它就会进行回滚,回滚的时候,哪怕你的第二条语句在第一次提交的时候是成功的,它在第
二次提交的时候也会回滚,那么第一次的更改也会恢复到之前的状态,这就是二次提交协议。(可以查看一下
数据库方面的文档来了解二次提交协议)
分享到:
相关推荐
TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM ...
本教程将详细讲解如何搭建JPA开发环境以及如何理解与应用全局事务。 首先,我们需要了解**JPA的基本概念**。JPA提供了一种面向对象的方式来映射关系数据库,使得开发者可以使用Java对象来操作数据库,而无需直接...
在二阶段提交过程中,Try阶段成功后,如果全局事务提交,执行Confirm,否则执行Cancel。 - **Saga模式**:基于一系列原子操作的长事务,每个操作都是一个子事务,若子事务失败,可以回滚到之前的一个稳定状态。这种...
在AT模式下,Seata通过拦截器自动插入本地事务,跟踪每个事务分支的状态,并在全局事务提交或回滚时协调这些分支。这一模式简化了开发者对分布式事务的处理,使得业务代码无需显式地管理事务边界。 Seata的AT模式...
当全局事务提交时,所有Saga依次提交,如果有任何一个失败,就会按照相反的顺序回滚。 5. **分布式事务API** Seata提供了Java API供开发者使用,包括开始全局事务(GlobalBegin),提交全局事务(GlobalCommit),...
当全局事务提交时,RM根据分支事务的状态决定是否执行提交或回滚操作。 3. **两阶段提交协议(2PC,Two-Phase Commit)**:Seata采用优化后的两阶段提交协议来实现分布式事务的提交。第一阶段,TC询问所有RM是否...
在Seata的AT(Automatic Two-phase Commit)模式下,当一个分支事务执行时,会先记录undo日志,如果全局事务提交,这些变更会被提交;如果全局事务回滚,undo日志则用于回滚分支事务。 Seata支持多种RPC框架(如...
如果所有服务的本地事务都成功,那么全局事务提交;如果有任何一个失败,就回滚所有已完成的本地事务。 通过这个示例,开发者可以了解如何在实际项目中集成Seata,处理分布式环境下的事务问题,并为自己的微服务...
在AT模式下,Seata会记录每个分支事务的元数据,当全局事务提交时,TC会根据这些元数据自动完成提交;如果全局事务回滚,TC则会根据元数据执行逆向操作,进行回滚。 TCC模式则需要业务服务提供Try、Confirm和Cancel...
在该模式下,Seata会记录每个微服务中事务的中间状态,然后在全局事务提交或回滚时,根据这些记录对MySQL中的事务进行提交或回滚。 **Spring Boot** 是一个基于Spring框架的快速开发工具,简化了Spring应用的初始...
当全局事务提交时,TC 将所有分支的回滚日志提交为真实事务;如果全局事务回滚,TC 则根据回滚日志进行反向操作。 ### Seata 0.8.1 版本的特性 1. **性能优化**:0.8.1 版本可能对核心算法进行了优化,提高了事务...
在RM端,需要将本地数据库操作注册为事务分支,当全局事务提交时,这些分支事务会按照2PC(两阶段提交)协议进行提交。 在seata-order-service中,订单服务会触发对账户服务和库存服务的调用,这些调用会被包装在...
在AT模式下,Seata会记录每个服务操作的原始数据和预提交状态,当全局事务提交时,根据这些记录执行真正的更新;如果回滚,则恢复到原始状态。 3. **TCC模式**:Transaction Compensation Commit模式是另一种可选的...
当事务提交时,Seata 会生成一个预提交 SQL,并在全局事务提交后执行。 5. **TCC 模式**: TCC 模式要求每个服务提供 Try、Confirm 和 Cancel 三个操作,Try 验证资源是否可用,Confirm 确认事务,Cancel 回滚事务...
Transaction Coordinator(TC) :事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚; Transaction Manager(TM) :控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚...
如果所有局部事务都成功,则提交全局事务。 通过以上步骤,我们可以构建一个完整的JPA开发环境,并了解如何在Spring框架下使用JPA进行全局事务的处理。JPA的使用极大地简化了数据库操作,而全局事务则保证了复杂...
1. **全局事务管理**:Atomikos允许开发者定义跨越多个数据库、消息队列或其他资源管理器的全局事务。这使得系统能够按照ACID(原子性、一致性、隔离性和持久性)原则处理事务,即使在分布式环境下也能保证数据的...
在AT模式下,Seata代理客户端的数据库操作,自动记录每个事务分支的预提交状态,并在全局事务提交或回滚时完成真正的提交或回滚。 TCC模式是Try-Confirm-Cancel的缩写,是一种补偿型事务模式。业务服务提供Try、...
2. 全局可串行化:通过全局事务提交标志和事务全序排序,确保所有操作都能按照一个全局一致的顺序执行,防止数据异常。 3. 全时态数据库:引入全时态数据库概念,允许在任何时间点查询到一致的数据状态,即使在并发...
阿里云专有云企业版V3.8.2全局事务服务用户指南主要涵盖了关于全局事务服务(Global Transaction Service,简称GTS)的详细信息,旨在帮助用户理解和使用该服务。全局事务服务是一种分布式事务解决方案,它能够处理...