spring事务传播之required nested requires_new



一)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 处理

spring事务传播之required nested requires_new_第1张图片

 

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处理,不知道是不是太显而易见,所以大家都没有说,如有错误欢迎指正。

 

你可能感兴趣的:(常识数据)