多数据源,配置完事务之后就不能正常切换数据源

我也遇到了这个问题,仔细debug了一下,结论如下:
1. AOP可以触发数据源字符串的切换,这个没问题
2. 数据源真正切换的关键是 AbstractRoutingDataSource 的 determineCurrentLookupKey() 被调用,此方法是在open connection时触发
3. 事务是在connection层面管理的,启用事务后,一个事务内部的connection是复用的,所以就算AOP切了数据源字符串,但是数据源并不会被真正修改

综上所述:
如果要使用事务,还是别用determineCurrentLookupKey()这种方法切数据源了,得配置多个才行
posted @ 2020-01-29 21:21  未月廿三  阅读(1933)  评论(0编辑  收藏  举报