1、问题
这次调试代码遇到一个奇怪的问题,我使用 dynamic datasource 进行多数据源配置,在 service 中建立了两个方法大致内容如下,即需要在 getDatabase0 中调用 getDatabase1 方法,然后查询 mySql1 的数据,但是查询后返回的值一直是 mySql0 这个库的数据。
@DS("mySql0")
public B_FertilizerSite getDatabase0(){
return getDatabase1();
}
@DS("mySql1")
public B_FertilizerSite getDatabase1(){
return b_fertilizerSiteMapper.selectByPrimaryKey(1);
}
2、处理
针对这个问题,可以通过代码改动来解决,如下:
@DS("mySql0")
public B_FertilizerSite getDatabase0(){
return ((TestFertilizerSiteService)AopContext.currentProxy()).getDatabase1();
}
@DS("mySql1")
public B_FertilizerSite getDatabase1(){
return b_fertilizerSiteMapper.selectByPrimaryKey(1);
}
同时在 Application 中添加
@EnableAspectJAutoProxy(exposeProxy = true)
3、原因
这是因为,我们调用 @DS 注解实际是产生一个代理对象,调用 getDatabase0 的时候,调用的是代理对象的 getDatabase0,但是代理对象的 getDatabase0 方法中,调用的是实际对象的 getDatabase1 方法,这里拿到代理对象(通过这个命令 AopContext.currentProxy()),让他调用代理对象的 getDatabase1 方法即可。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于