我想实现Db在操作数据库的时候,自动切换数据源,写了一个第三方拦截器,拦截到configName之后,看到2年前您的回答,可以
connection = config.getDataSource().getConnection()config.setThreadLocalConnection(connection)inv.invoke()
您2年前回答里说,这样设置以后,就会自动拦截操作,可是我试了一下,不会的,默认还是Main,这个是怎么回事呢,是更新了吗,求解答,非常感谢。
我正在用jfinal实现多租户,看了相关的回答,期待回答。
项目:JFinal
setThreadLocalConnection这个代码是在Config类的。
比如你用Db.find(String sql)这个类方法,那么它的调用链是 :
Db.find(sql) > (DbPro)MAIN.find(sql) > config.getConnection() > threadLocal.get()
看Connection conn是在最下层进行切换的。
所以上层MAIN对象是不变的,在它里面持有的Config config对象里面的ThreadLocal threadLocal进行操作的。