事务介绍乱如麻,自己实际测试得到结果,整理记录。
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,会将外层事务挂起,形成两个独立的事务,这时外层报错,内层就不会回滚了!