上次对项目进行了多数据源改造,已经成功实现,但在部分接口上发现了问题,有一些接口一旦用了两个数据源,那么就只会在调用的接口实现方法,也就是主方法上的注解成效,而内部调用的方法上的自定义注解不生效,导致我这个接口需要有两个数据源的数据进行业务处理,但就报错说找不到对应的表那些。
后面参考看了这篇博客解决内部调用自定义注解的方法失效问题_我两年升高级的博客-CSDN博客_自定义注解失效才了解到,AOP在service方法的内部调用时,无法进入切面处理。。。现在就把这个问题记录下来,防止后面的同学踩坑。
首先,需要在启动类上加上注解
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
看了一下这个注解的源码,注解后面的参数true也要加上,因为默认全是false。。
接下来就是在我们的内部调用方法,加上判断,在调用内部方法也用当前这个代理去处理。
if (null != AopContext.currentProxy()) {
((MyService)AopContext.currentProxy()).methodB();
} else {
methodB();
}
这样就解决了,成功实现在一个接口上用两个数据源的数据进行业务处理的逻辑,完美