谷粒商城---本地事务和分布式事务

一、本地事务

1、事务的基本性质

在这里插入图片描述

在这里插入图片描述

2、事务的隔离级别

在这里插入图片描述
在这里插入图片描述

3、事务的传播行为

在这里插入图片描述

4、本地事务的坑

本地事务用法: 主启动类上添加@EnableTransactionManagement开启本地事务,需要添加事务的类或者方法上添加@Transactional,然后本地事务注解@Transactional(XXX)中可以添加参数,例如rollbackFor = 异常名称.classpropagation = Propagation.传播行为名称timeout=秒数(执行时间超过该秒数就要回滚)

前提: 同一个类中(添加了@Service,代表被spring管理,那就是单例的,一个类只有一个对象)有A、B两个方法,并且两个方法上面添加的都有@Transactional事务注解,并且B方法上的事务注解中添加了参数propagation = Propagation.REQUIRES_NEW,表示方法B使用新事务,也就是不和其他方法共用事务,虽然想法是好的,但是效果却不是这样

问题: 在如下代码中,当调用insertA方法时,如果insertB插入b表的时候有异常,能否保证insertA()中的a表插入成功,如果不能,应该如何修改?

分析: 虽然B方法上的事务注解中添加了参数propagation = Propagation.REQUIRES_NEW,但是这个事务注解是不会起到效果的,因为在同一个对象中的A方法中调用B方法,那么相当于B方法中的代码直接就写在A方法中,那么说明B方法上是否添加事务注解都是无所谓的,有没有都不重要,也就是说明B方法完全被调用的时候完全使用A方法的事务注解,其实这和事务内部原理是有关系的,如果学习过JDK动态代理的朋友就会知道,它内部使用的就是类似于try catch这种代码,所以A方法调用B方法,那是发生在同一个try{}中的,也就是被一个事务管理,所以以上的说法是没有问题

解决: https://blog.csdn.net/qq_42449963/article/details/112982714,这是我之前看到的一个面试题,也是我写的博文,看就对了

二、分布式事务

1、为什么要有分布式事务

在这里插入图片描述

在这里插入图片描述

2、CAP定理与BASE理论

1、CAP定理

在这里插入图片描述
在这里插入图片描述

2、面临的问题

在这里插入图片描述

3、BASE理论

在这里插入图片描述

4、强一致性、弱一致性、最终一致性

在这里插入图片描述

3、分布式事务几种方案

1)、2PC模式

在这里插入图片描述
在这里插入图片描述

2)、柔性事务-TCC事务补偿型方案

在这里插入图片描述
在这里插入图片描述

3)、柔性事务-最大努力通知型方案

在这里插入图片描述

4)、柔性事务-可靠消息+最终一致性方案(异步确保型)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值