spring事务传播之required nested requires_new

本文详细探讨了Spring事务传播中的required、nested和requires_new三种模式在异常情况下的表现。在不同场景下,它们对事务回滚的影响各异,特别是nested模式,它结合了required和requires_new的特点。当异常发生时,nested和requires_new能在try-catch处理后体现出事务的独立性。总结来说,nested在事务嵌套中扮演了复杂但关键的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



一)A中异常情况


1)serverB.B  REQUIRED 的结果      全部回滚数据不变

2)serverB.B  NESTED    的结果      全部回滚数据不变

3)serverB.B  REQUIRES_NEW的结果    serverB.B 不回滚如图:

结论:

此种情况required 和nested 结果相同

REQUIRES_NEW作为一个新的事务时独立执行的

 

二) B中异常情况

 

1)serverB.B  REQUIRED 的结果      全部回滚数据不变

2)serverB.B  NESTED    的结果      全部回滚数据不变

3)serverB.B  REQUIRES_NEW的结果    全部回滚数据不变

结论:

顺序执行不做异常处理时:三者执行的结果一致

 

三)B中异常情况  server.B try_catch 处理

 

1)serverB.B  REQUIRED 的结果      全部回滚数据不变

2)serverB.B  NESTED    的结果      B回滚,A不会滚如图

3)serverB.B  REQUIRES_NEW的结果    B回滚,A不会滚如图

 

结论:

requires_new nested 是事务独立,但是异常报给A方法后导致了A回滚,只有try_catch处理后才能体现requires_new nested的事务独立性

 


最终的结论:

nested 作为事务嵌套,同时兼具了required,requires_new的特性。

当外层事务回滚时nested required 同时内层全部进行回滚

当内层事务回滚时,rested requires_new 不影响外层事务




另:nested 还有对版本的要求,还没有细看,看网上的各种文章也没有说明 需要try—catch处理,不知道是不是太显而易见,所以大家都没有说,如有错误欢迎指正。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值