MybatisPlus 多数据源切换@DS注解失效问题解决

 更新时间:2025年12月14日 08:38:24   作者:DavidSoCool  
在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,下面就来介绍一下该问题的解决,感兴趣的可以了解一下

在业务开发中使用到了多数据源,遇到了@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注解失效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论