注解方法嵌套调用失效的问题
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方法即可。
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方法即可。