springboot mybatis 中 多数据源切换无效的问题
多数据源无效问题
输出当前数据源的连接,以便观察数据源的切换情况
@Bean
public class DbUtil {
@Autowired
private DataSource dataSource;
public Connection getCurrentConn(){
DynamicRoutingDataSource dynamicRoutingDataSource = (DynamicRoutingDataSource) dataSource;
Connection connection = null;
try {
connection = dynamicRoutingDataSource.getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
多数据源失效的原因之一
代理问题
spring 用的是cglib代理,cglib的代理是以继承父类的方式实现的
class A{
@DS("aa")
test(){
test1();
}
@DS("bb")
test1(){
}
}
//模拟代理A类之后的实例
class B extends A{
}
//应用实际拿到是这样的对象
Bean caller = new B();
//代理开始
//执行前检查各种方法上的注解。。根据不同注解实现不同事情
//如果有DS注解,实际在此处数据源就被切换
caller.test();// 这个方法被调用时 是代理执行的
//代理结束
caller.test中自己调用test1方法 实际上是没有走代理,所以没有任何机制检测到test1上的DS注解,这就导致数据源切换失败
解决办法就是另外写一个类来写test1,让caller去掉其他的类
其他相同的问题比如 @Asyn 异步注解无效
Rust编程语言群 1036955113
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。