事务最大的一个特点就是aop代理 是使用代理对象来控制的
如果在同一个service中编写两个方法,内部调用时候,会导致事务设置失效,原因是没用到代理对象的缘故
因此调同一个service中自己的两个方法,这两个方法上面的事务会失效都是跟a公用一个事务
同一个对象内事务方法互调默认失效,原因 绕过了代理对象 就相当于把b,c方法复制过来
如果b,c方法分别是其他service中的方法是有用的
本地事务失效问题
同一个service对象内事务方法互调默认失效 原因绕过了代理对象 事务是使用代理对象来控制
解决方案:使用代理对象来调用事务方法
1.引入aop-starter 引入aspectJ OpenFeign带了AOP
2.@EnableAsepectJAutoProxy(exposeProxy = true) 对外暴露代理对象 开启aspectJ动态代理功能 以后所有的动态代理都是aspectJ创建的(即使没用接口也可以创建动态代理cglib)
3.本类互调 获取代理对象用代理对象来调 AopContext.currentProxy().b()/.c()