很奇怪,我在程序初始化的时候,以及在调用同一个接口,只是走了分支A的时候,这个切换是生效的。
但是当我调用同一个接口,只是方法内部走了分支B时,切换数据库就没能生效,依然使用的是mater。
奇怪的是明明DynamicDataSourceContext.peek()已经返回了slave,但是下句执行basemaper.select方法一直都会报错,提示找不到xx表(因为数据源切换没成功)。
为了解决这个问题,我尝试了在操作slave数据库的方法上添加了@DS(“slave”)注解,但是依然没有效果。
最后通过给切换失效的方法,加上
@DS(“slave”) 注解
@Transactional(propagation = Propagation.REQUIRES_NEW)
然后就好了
参考链接添加链接描述