什么是事务的传播特性

看到一个词“事务的传播特性”,在网上查找半天没理解是啥,看了一个网友列举的实例才有点明白,此处用其实例整理下思路:

上图方法1对应的事务叫事务1,方法2对应的事务叫事务2;其中事务1调用了事务2;

期望:想要让事务2发生异常时回滚,而事务1不回滚(catch后继续循环下一个);

实际:事务2回滚时事务1也回滚了,不符合期许;

原因:当调用方法1时会创建事务1,当调用方法2时准备创建事务2了,发现已经有事务1存在了,那就节省资源不创建事务2,直接用事务1了,导致方法1方法2用的同一个事务;

解决:更改事务2的隔离级别为----PROPAGATION_NESTED;

详细参考:https://blog.csdn.net/u010634066/article/details/78334259

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Spring它对JDBC的隔离级别作出了补充和扩展,其提供了7种事务传播行为。

1、PROPAGATION_REQUIRED:默认事务类型,如果没有,就新建一个事务;如果有,就加入当前事务。适合绝大多数情况。

2、PROPAGATION_REQUIRES_NEW:如果没有,就新建一个事务;如果有,就将当前事务挂起。

 3、PROPAGATION_NESTED:如果没有,就新建一个事务;如果有,就在当前事务中嵌套其他事务。

4、PROPAGATION_SUPPORTS:如果没有,就以非事务方式执行;如果有,就使用当前事务。

5、PROPAGATION_NOT_SUPPORTED:如果没有,就以非事务方式执行;如果有,就将当前事务挂起。即无论如何不支持事务。

6、PROPAGATION_NEVER:如果没有,就以非事务方式执行;如果有,就抛出异常。

7、PROPAGATION_MANDATORY:如果没有,就抛出异常;如果有,就使用当前事务。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值