通过注解动态切换数据源失败“坑”

1.多个切面

一个方法上多个注解,且注解实现里面用到不同的数据源

2.开启了事务

事务设置:1.通过注解@Transactional;2.通过配置文件配置事务

共同的一个事务,用的是同一个数据库连接,配置动态数据源就会切换失败,解决方式将用到不同数据源的代码分隔开,再开启事务。

3.方法内部调用​​​​​​​

public TestService {

    @DB("first")
    public void test1() {
        // do something
         test2();
    }

    @DB("second")
    public void test2() {
        // do something
    }
}

外部方法调用test1切换数据源会失败。数据源核心原理是基于aop代理实现切换,内部方法调用不会使用aop。

解决方法:将test2()方法提到另外一个service里面,单独调用。

你可能感兴趣的:(开发踩过的坑,数据库,事务,java,spring)