Spring事务底层源码解析(二)

今天根据具体的业务代码场景去分析spring事务的源码流程,其中事务传播属性还是PROPAGATION_REQUIRED

首先看下第一种业务场景,testTransaction1方法上加了@Transactionl注解,注解中调用了insertTransactionOne(),insertTransactionTwo()方法,这两个方法上面也都加了@Transactionl注解

首先看testTransaction1()方法,上节已经说了会创建数据库连接connection并与ThreadLocal绑定,此时事务状态newTransaction=true,表示这是新开启的事务。这些流程上节已经看过了,再看方法transactionOne.insertTransactionOne(),这个时候同样要去开启事务执行到了getTransaction方法中从ThreadLocal中获取数据库连接,此时就会判断isExistingTransaction方法,明显是存在的,就会去执行handleExistingTransaction方法

handleExistingTransaction方法的主要功能:

1、如果当前被调用的方法insertTransactionOne的事务传播属性为PROPAGATION_NESTED,那么就会将testTransaction1方法开启的事务挂起。

2、如果当前被调用的方法insertTransactionOne的事务传播属性为PROPAGATION_REQUIRED,那么就会将newTransaction属性设置为false,这个留意后面提交事务的时候有使用,然后就会去调用insertTransactionOne的原始方法,可以看到当前insertTransactionOne跟testTransaction1是在同一个事务中了。

当testTransaction1()方法执行完毕进行commit方法的时候,这里因为status.isNewTransaction为false,所以并不会执行testTransaction1方法的提交操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值