spring事务细节和事务传播解析

Spring事务的配置

在这里插入图片描述
在这里插入图片描述
上述就是spring事务的一个简单配置,只要给方法上加上Transactional,就可以控制住这个方法,在方法出现异常的时候进行回滚操作,同时还可以设置一些参数,关于这些参数也在上图中标记出来了。

下面主要是事务隔离级别和事务传播行为的介绍

1、事务隔离级别:

数据库事务并发的三大问题:

  1. 脏读:事务1将变量a从1改成10 >>> 事务2读取到a的值为10 >>> 事务1出现异常,把a回滚成1 >>>事务2拿到的值a=10就是一个脏值
  2. 不可重复读:事务1读取的变量a为1 >>> 事务2将变量a改为 10 >>>事务1再读取a的值就变成10 >>> 两次读取到的值不同
  3. 幻读:事务1读取了book表的全部数据 >>> 事务2向book表插入新行 >>> 事务1再去读取book表的时候发现多出来一些行

隔离级别:

  1. 读未提交:可以读到其他事务未提交的数据
  2. 读已提交:只能读取到其他事务已提交的数据
  3. 可重复读:在一次事务之间读取的值是相同的
  4. 串行化:绝对安全,效率低下

2、事务的传播行为:

传播行为就是(事务的传播+事务的行为)
主要考虑的问题:多个事务嵌套运行,子事务是否要和大事务共用一个事务
在这里插入图片描述
上图中事务的传播属性常用的就是REQUIRED和REQUIRED_NEW下面举例说明:

假设有三个事务tx1、tx2、tx3
======================
第一种情况:
tx1//方法1{
    tx2//方法2 REQUIRED
    tx3//方法3 REQUIRED
}
因为方法2 ,和方法3事务都是设置为REQUIRED,所以现在三个方法都是同坐一船,一旦
一个方法挂了,三个方法都挂了
====================
第二种情况:
tx1//方法1{
    tx2//方法2 REQUIRED_NEW
    tx3//方法3 REQUIRED
}
方法2设置为REQUIRED_NEW,这个时候就相当于方法1和方法3一起坐一条船,方法2另外开一条船
这里分为两种情况:
情况1:
方法2挂了,方法1和方法3也要挂,虽然方法2开了新船,但是它会把异常抛出来到方法1和方法3的船。
情况2:
方法3挂了,方法13全部挂了,但这个时候不会影响到方法2,方法2自己早就开新船跑了。
===========

注,只有代理对象调用方法才能被spring事务控制
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值