注解方法嵌套调用失效的问题

Published on in 程序人生 with 0 views and 0 comments

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方法即可。


标题:注解方法嵌套调用失效的问题
作者:wenyl
地址:http://www.wenyoulong.com/articles/2021/12/15/1639558827249.html