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