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