Bootstrap

Springboot @Transactional 事务嵌套测试

事务介绍乱如麻,自己实际测试得到结果,整理记录。

A方法中调用B方法

 1、当A和B在同一个类中时:

  1.1A加事务,B加事务,A中报错,事务生效

  1.2B加事务,A中报错,事务失效

  1.3A加事务,A中报错,事务生效

  1.4A加事务,B加事务,B中报错,事务生效

  1.5B加事务,B中报错,事务失效

  1.6A加事务,B中报错,事务生效

 2、当A和B不在同一个类中时:

  2.1A加事务,B加事务,A中报错,事务生效

  2.2B加事务,A中报错,事务失效

  2.3A加事务,A中报错,事务生效

  2.4A加事务,B加事务,B中报错,事务生效

  2.5B加事务,B中报错,事务生效

  2.6A加事务,B中报错,事务生效

总结:

 外层方法加事务时:事务一定生效;

 外层方法不加事务,内层方法加事务时,如果满足以下两条件,则事务生效:

    1,两方法在不同类

    2,内层方法报错

 其余情况,事务不生效

补充:此处测试,使用@Transactional注解,不修改spring事务的传播属性,相当于

@Transactional(propagation = Propagation.REQUIRED)

如果手动修改传播属性为Propagation.REQUIRES_NEW,会将外层事务挂起,形成两个独立的事务,这时外层报错,内层就不会回滚了!

 

 

;