请教一下关于自动切换数据源setThreadLocalConnection

我想实现Db在操作数据库的时候,自动切换数据源,写了一个第三方拦截器,拦截到configName之后,看到2年前您的回答,可以

connection = config.getDataSource().getConnection()config.setThreadLocalConnection(connection)inv.invoke()

您2年前回答里说,这样设置以后,就会自动拦截操作,可是我试了一下,不会的,默认还是Main,这个是怎么回事呢,是更新了吗,求解答,非常感谢。

我正在用jfinal实现多租户,看了相关的回答,期待回答。

评论区

杜福忠

2020-07-27 15:42

可以读一下源码,这样就不会迷惑了。 我来说说吧,
setThreadLocalConnection这个代码是在Config类的。
比如你用Db.find(String sql)这个类方法,那么它的调用链是 :
Db.find(sql) > (DbPro)MAIN.find(sql) > config.getConnection() > threadLocal.get()
看Connection conn是在最下层进行切换的。
所以上层MAIN对象是不变的,在它里面持有的Config config对象里面的ThreadLocal threadLocal进行操作的。

JFinal

2020-07-28 22:47

应该可以的,你单步调试一下

热门反馈

扫码入社