@Transaction 注解导致动态切换更改数据库失效
使用场景
- 给所有的
Controller
方法上加切点 - 在
@Before
注解的方法里,根据http
请求中携带的header
,动态切换数据源 - 使用mybatis或者jpa执行操作
遇到问题
当给Controller
方法加上@Transaction
注解后,动态切换数据源就失效了,原因是每次@Before
注解的方法运行之前,protected abstract Object determineCurrentLookupKey();
就已经运行了,而这个方法是切换数据源的关键。
解决
其实也算不上解决,就是不要在Controller
方法上加事务注解,非要加事务,中间的Service
层就不要省了。