`

全局事务的提交

 
阅读更多
全局事务怎么做呢?
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,那么全局事务就认为你这
个事务是失败的,它就会进行回滚,回滚的时候,哪怕你的第二条语句在第一次提交的时候是成功的,它在第
二次提交的时候也会回滚,那么第一次的更改也会恢复到之前的状态,这就是二次提交协议。(可以查看一下
数据库方面的文档来了解二次提交协议)
分享到:
评论

相关推荐

    分布式事务、spring cloud \微服务

    TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM ...

    分布式(LCN)事务Demo.zip

    在事务开始时,先锁定参与事务的所有资源,然后执行本地事务,本地事务完成后,全局事务通过某种机制来确认所有本地事务的执行情况,如果所有本地事务都成功,则全局事务提交,否则回滚。 在LCN模型中,首先会有一...

    分布式事务实战_hy5.zip

    在 AT 模式下,Seata 会自动生成回滚日志,并在全局事务提交时自动补偿执行的本地事务,从而保证全局事务的一致性。 在实际应用中,Seata 已经被广泛应用于微服务架构中,帮助开发者轻松构建稳定可靠的分布式事务...

    分布式事务seata 资源

    在二阶段提交过程中,Try阶段成功后,如果全局事务提交,执行Confirm,否则执行Cancel。 - **Saga模式**:基于一系列原子操作的长事务,每个操作都是一个子事务,若子事务失败,可以回滚到之前的一个稳定状态。这种...

    【java】通过seata分布式事务框架解决分布式事务问题_pgj.zip

    如果全局事务提交,这些补偿日志将被丢弃;如果全局事务回滚,Seata将使用这些补偿日志恢复数据到事务执行前的状态。这一过程对开发者来说是透明的,简化了业务代码的编写。 除了AT模式,Seata还提供了TCC(Try-...

    03_传智播客JPA详解_搭建JPA开发环境和全局事务介绍

    本教程将详细讲解如何搭建JPA开发环境以及如何理解与应用全局事务。 首先,我们需要了解**JPA的基本概念**。JPA提供了一种面向对象的方式来映射关系数据库,使得开发者可以使用Java对象来操作数据库,而无需直接...

    AT模式seate测试代码

    在AT模式下,Seata通过拦截器自动插入本地事务,跟踪每个事务分支的状态,并在全局事务提交或回滚时协调这些分支。这一模式简化了开发者对分布式事务的处理,使得业务代码无需显式地管理事务边界。 Seata的AT模式...

    分布式事务实战_pgc.zip

    最后,当全局事务提交时,Seata会确保所有相关的本地事务要么全部提交,要么全部回滚,从而达到分布式事务的ACID特性。 Seata通过与数据库驱动的集成,实现了对本地事务的自动管理。开发者在应用中集成Seata后,...

    seata分布式事物模型代码

    当全局事务提交时,所有Saga依次提交,如果有任何一个失败,就会按照相反的顺序回滚。 5. **分布式事务API** Seata提供了Java API供开发者使用,包括开始全局事务(GlobalBegin),提交全局事务(GlobalCommit),...

    seata-server-1.7.0.zip

    当全局事务提交时,RM根据分支事务的状态决定是否执行提交或回滚操作。 3. **两阶段提交协议(2PC,Two-Phase Commit)**:Seata采用优化后的两阶段提交协议来实现分布式事务的提交。第一阶段,TC询问所有RM是否...

    seata分布式事务Demo_hy5.zip

    3. Seata在全局事务提交时,比较数据快照和当前数据库状态,生成补偿逻辑。 4. 在全局事务回滚时,Seata会执行补偿逻辑,恢复数据到快照状态。 5. 如果全局事务成功,则删除数据快照,保证数据的一致性。 通过这样...

    Seata在微服务一致性中的探索.pptx

    在Seata的AT(Automatic Two-phase Commit)模式下,当一个分支事务执行时,会先记录undo日志,如果全局事务提交,这些变更会被提交;如果全局事务回滚,undo日志则用于回滚分支事务。 Seata支持多种RPC框架(如...

    seata实现分布式事务demo

    如果所有服务的本地事务都成功,那么全局事务提交;如果有任何一个失败,就回滚所有已完成的本地事务。 通过这个示例,开发者可以了解如何在实际项目中集成Seata,处理分布式环境下的事务问题,并为自己的微服务...

    seata-server-1.4.2

    在AT模式下,Seata会记录每个分支事务的元数据,当全局事务提交时,TC会根据这些元数据自动完成提交;如果全局事务回滚,TC则会根据元数据执行逆向操作,进行回滚。 TCC模式则需要业务服务提供Try、Confirm和Cancel...

    seata-server-1.4.0-all

    在该模式下,Seata会记录每个微服务中事务的中间状态,然后在全局事务提交或回滚时,根据这些记录对MySQL中的事务进行提交或回滚。 **Spring Boot** 是一个基于Spring框架的快速开发工具,简化了Spring应用的初始...

    seata0.8.1

    当全局事务提交时,TC 将所有分支的回滚日志提交为真实事务;如果全局事务回滚,TC 则根据回滚日志进行反向操作。 ### Seata 0.8.1 版本的特性 1. **性能优化**:0.8.1 版本可能对核心算法进行了优化,提高了事务...

    cloudAlibaba-nacos.zip

    在RM端,需要将本地数据库操作注册为事务分支,当全局事务提交时,这些分支事务会按照2PC(两阶段提交)协议进行提交。 在seata-order-service中,订单服务会触发对账户服务和库存服务的调用,这些调用会被包装在...

    seata的快照表:undo-log

    在全局事务提交(Commit)时,协调器会保证所有本地事务都已经成功提交,然后删除对应的undo-log记录。相反,在全局事务回滚时,协调器会通知每个服务使用undo-log记录的内容来回滚本地事务。 Seata的undo-log快照...

    seata-server-0.9.0.rar

    在AT模式下,Seata会记录每个服务操作的原始数据和预提交状态,当全局事务提交时,根据这些记录执行真正的更新;如果回滚,则恢复到原始状态。 3. **TCC模式**:Transaction Compensation Commit模式是另一种可选的...

    该框架是基于消息队列的分布式事务解决方案.zip

    - 当所有依赖服务都成功完成本地事务后,全局事务提交;如果有任何服务失败,全局事务则回滚。 利用消息队列的分布式事务解决方案具有良好的解耦特性,能够提高系统的可用性和伸缩性。而且,通过异步消息传递,还能...

Global site tag (gtag.js) - Google Analytics