在业务开发中使用到了多数据源,遇到了@ds注解失效问题,有两个场景使用到同一个@ds的查询方法,一个正常,另一个失效。
伪代码如下:
@service
public class userservice {
@autowired
private otherservice other;
// 正常
public void writeandread() {
other.query();
}
// 失效
@transactional
public void writeandread() {
other.query();
usermapper.insert(...);
}
}
@ds("slave")
@service
public class otherservice {
public void query() {
mapper.selectlist(...);
}
}场景一和二正常都打印了@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注解失效内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论