本文主要是介绍MybatisPlus 多数据源切换@DS注解失效问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《MybatisPlus多数据源切换@DS注解失效问题解决》在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,下面就来介绍一下该问题的解决,感兴趣的可以...
在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,一个正常,另一个失效。
伪代www.chinasem.cn码如下:
@Service
public class UserService {
@Autowired
private OtherService other;
// 正常
public void writeAndRead() {
other.javascriptquery();
}
// 失效
@Transactional
android public void writeAndRead() {
other.query();
userMapper.insert(...);
}
}
@DS("slave"android)
@Service
public class OtherService {
public void query() {
mapper.selectList(...);
http://www.chinasem.cn }
}场景一和二正常都打印了@DS中的key

后续排查发现是失效场景中使用了事务注解 @Transactional,事务注解会绑定数据源,导致@DS失效,后续解决方案是在使用@DS切换数据源的类方法上加入一下代码:
@DS("slave")
@Service
public class OtherService {
// 非事务性地执行
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void query() {
mapper.selectList(...);
}
}到此这篇关于MyBATisPlus 多数据源切换@DS注解失效问题解决的文章就介绍到这了,更多相关MybatisPlus @DS注解失效内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于MybatisPlus 多数据源切换@DS注解失效问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!