A类a方法调用B类B方法
1.事务调用死锁:
a,b开启事务 a的传播级别为默认REQUIRED b的传播级别为NOT_SUPPORTED
a新增/更新数据 b更新同条数据 发生事务死锁
原因分析 : a开启事务,新增/更新数据时会锁住数据,执行b,b不支持事务会暂停a的事务,a事务还未提交就被暂停,数据加锁,b又去更新数据(此时无法更新一直等待锁的释放,陷入死锁)
2. a有事务调用b没有事务
事务是否失效看a的传播级别
3.a没有事务,b有事务 (a,b在同一个类下)
事务失效
原因:同一个类中调用方法都是获取的本类的原生对象(只有外部类调用才会获取代理对象),原生对象没有经过aop代理会导致事务失效。
解决方法:获取代理对象后在调用方法:通过AopContext方法获取代理对象((Service)Aopcontext.getCurrentProxy()).testMethod(); (注意:需要启动类上增加注解@enableaspectjautoproxy(exposeproxy=true));