一个有事务的方法,去调用另一个有事务的方法,会怎么样?
一个没有事务的方法,去调用一个有事务的方法,会怎么样?
事务方法之间的嵌套调用,普通方法和事务方法之间的嵌套调用,都不会开启新的事务!
为什么会这样呢?
其实通过上面的动态代理的代码,你应该可以发现:
动态代理最终都是要调用原始对象的,而原始对象在去调用方法时,是不会再触发代理了!
那么如何解决呢?
很简单,我们完全可以在抽出一个XxxService,在其内部调用UserService.txMethod()和UserService.txMethod2()方法即可。总而言之,避免在一个Service内部进行事务方法的嵌套调用!(因为动态代理导致这种场景事务失效了。)
https://www.jianshu.com/p/0da29e4f354a