spring的事务自己再理解的,required,new,nested

先假设A是大方法,B是小方法

required,A没有事务时调用B方法(B的事务隔离级别是required),B就会开启自己单独的事务,B要回滚的话,也是回滚B。A有事务时,B就加入到A这个事务(B不开启自己的事务了),这里发生回滚的话,AB的事务就都被回滚了。

new , A没有事务时调用B方法(B的事务隔离级别是new),B就会开启自己单独的事务,B要回滚的话,也是回滚B。A有事务时,B还是会开启自己的事务,B事务发生回滚时,AB事务都会一起回滚,但是当执行了B事务时,A事务时挂起的,当执行完B事务且commit成功后,B事务结束,A事务恢复,若此时A事务发生回滚,那只是A事务回滚,不影响B事务的提交了。

nested,A没有事务调用B方法时(B的事务隔离级别是new),此时就相当于是required了。A有事务时,B事务也开启,但B事务此时是相当于A事务的嵌套子事务(不是太懂,意思是执行B时A不挂起??),B事务发生回滚时,会回到B事务开启执行时的savepoint(保存点),此时B事务已经结束了,然后继续从B事务开始时的保存点开始,继续A事务。如果期间B事务没回滚,那B事务的提交也是要和A事务一起提交,而且此时B事务没回滚执行完之后,但A事务出现回滚,AB事务就没法提交,那就都回滚了(这就是嵌套子事务的概念吧?)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值