这次调试代码遇到一个奇怪的问题,我使用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);
}
针对这个问题,可以通过代码改动来解决,如下:
@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)
这是因为,我们调用@DS注解实际是产生一个代理对象,调用getDatabase0的时候,调用的是代理对象的getDatabase0,但是代理对象的getDatabase0方法中,调用的是实际对象的getDatabase1方法,这里拿到代理对象(通过这个命令AopContext.currentProxy()),让他调用代理对象的getDatabase1方法即可。