以下测试均使用@Transactional默认设置!
controller–>serviceA–>serviceB
1.1. serviceA(添加注解)–>serviceB(添加注解,并抛出异常)------------------------>结果A和B都回滚
1.2. serviceA(添加注解,并抛出异常)–>serviceB(添加注解)------------------------>结果A和B都回滚
结论:不同的类中,两个不同的方法A和B(A调用B),两个方法都添加有事务注解,不论哪一个方法抛出异常,两个方法都会进行回滚
2.1 serviceA(添加注解)–>serviceB(不添加注解,并抛出异常)----------------------->结果A和B都回滚
2.2 serviceA(添加注解,并抛出异常)–>serviceB(不添加注解)----------------------->结果A和B都回滚
2.3 serviceA(不添加注解)–>serviceB(添加注解,并抛出异常)----------------------->结果A不回滚、B回滚
2.4 serviceA(不添加注解,并抛出异常)–>serviceB(添加注解)----------------------->结果A不回滚、B不回滚
结论:
- 不同类中,调用方添加注解,不论调用方还是被调用方抛出异常,结果双方都会进行回滚;
- 不同类中,调用方不添加注解,不论调用方还是被调用方抛出异常,结果双方都不会进行回滚;
controller–>serviceA.test01()–>serviceA.test02()
1.1. serviceA.test01()(添加注解)–>serviceA.test02()(添加注解,并抛出异常)------------------------>结果test01()和test02()都回滚
1.2. serviceA.test01()(添加注解,并抛出异常)–>serviceA.test02()(添加注解)------------------------>结果test01()和test02()都回滚
结论:相同类中,两个不同的方法test01和test02(test01调用test02),两个方法都添加有事务注解,不论哪一个方法抛出异常,两个方法都会进行回滚
2.1 serviceA.test01()(添加注解)–>serviceA.test02()(不添加注解,并抛出异常)----------------------->结果test01()和test02()都回滚
2.2 serviceA.test01()(添加注解,并抛出异常)–>serviceA.test02()(不添加注解)----------------------->结果test01()和test02()都回滚
2.3 serviceA.test01()(不添加注解)–>serviceA.test02()(添加注解,并抛出异常)----------------------->结果test01()不回滚、test02()不回滚
2.4 serviceA.test01()(不添加注解,并抛出异常)–>serviceA.test02()(添加注解)----------------------->结果test01()不回滚、test02()不回滚
结论:
- 相同类中,调用方法添加注解,不论调用方还是被调用方抛出异常,结果双方都会进行回滚;
- 相同类中,调用方法不添加注解,不论调用方还是被调用方抛出异常,结果双方都不会进行回滚;