baomidou / dynamic-datasource

dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务
https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611
Apache License 2.0
4.67k stars 1.19k forks source link

@DS数据源未匹配成功,不管如何设置都是使用默认的primary的库 #44

Closed noroadzh closed 5 years ago

noroadzh commented 5 years ago

Enviroment

JDK Version(required): jdk1.8 SpringBoot Version(required): 2.1.3.RELEASE Starter Version(required): 2.5.3

Describe

按照示例进行了项目改造,然后我不管在mapper还是serviceImpl里面设置ds源,都无效,直接全是primary设置的库,我跟踪进去后,发现DS的value注入值一直为null,调试跟踪没有解决掉,所以来请教下

项目使用了mybatisplus 3.1.0版本

image

image

image

image image

image

跟了代码,发现在init load的时候,的确两个连接都进去了,但是在使用的时候,ds不能取到填写的那个value的值

Expected Result: 我的表system_user是在membermanage库,但是每次都是到我的默认库smartcampus

Actual Result:

期望能在指定库,不是在默认库

Steps to reproduce

huayanYu commented 5 years ago

继续跟踪下源码吧主要关注为什么没从注解上获取到值,,单纯看配置没发现问题,只建议在service上注解.

huayanYu commented 5 years ago

这个版本肯定没有这么低级的问题了. 只有自己调下源码了.

noroadzh commented 5 years ago

这个版本肯定没有这么低级的问题了. 只有自己调下源码了.

最近跟了几天 发现多个数据源的,解析出来是单数据源,还在看为啥

noroadzh commented 5 years ago

image 动态数据源都加载成功了,使用就不行

DoyuTu commented 5 years ago

必须注解于Service实现类上,Mapper无效

noroadzh commented 5 years ago

必须注解于Service实现类上,Mapper无效

当上面那位仁兄说了 注解到Service上的时候,我已经修改了,但是修改了后 一样的 ds注解取到的值都是null,初始化加载都进去了,拿出来用就不行

noroadzh commented 5 years ago

问题解决了,原来是我项目中使用了shiro,将dynamicDatasource的注解给弄的失效了,处理方法是将shiro的多个策略弄到监听器中去做处理,也就是容器启动后再注入进去

ynp commented 5 years ago

引入shiro 配置读不到了,你的shiro策略怎么配的 ,能给个例子不?@noroadzh

rw12306 commented 3 years ago

我是有一个Service用不到,其他的地方都能切换成功,就这一个地方不起作用。 ---- service 层 @Service("stEncryptedDetailsService") @Slf4j @DS(MultiDataSourceCofig.BASE) public class StEncryptedDetailsServiceImpl extends ServiceImpl<StEncryptedDetailsDao, StEncryptedDetailsPO> implements StEncryptedDetailsService {

@Autowired
private StEncryptedDetailsDaoExt stEncryptedDetailsDaoExt;
@Autowired
private SraActionDaoExt sraActionDaoExt;

@Override
public String encrypt(String orgCode,String json) {
    try {
        String encrypt=json;
        //如果机构编码为空
        if (Strings.isNullOrEmpty(orgCode)){
            //直接返回该字符串
            return json;
        }

---dao 层---@Mapper @DS(MultiDataSourceCofig.BASE) public interface StEncryptedDetailsDaoExt extends StEncryptedDetailsDao { //根据机构编码查询加密信息 List findByOrgCode(String orgCode); }

JiangSir666 commented 3 years ago

上面老兄正解,确实是shiro导致ds失效,解决办法,在你所需要注入的类上面加上@Lazy注解即可

lishaopeng221 commented 6 months ago

上面老兄正解,确实是shiro导致ds失效,主要是加载顺序问题

xiawei520 commented 4 months ago

我没有用shiro,一直不生效。我的项目用的是 jdk17+springboot 3.2.1+dynamic 4.3.0 +druid 1.2.19 + mybatis-plus 3.5.5

liudaok commented 1 week ago

你的解决了吗,我也出现这样的问题。jdk17+springboot3.2.9+dynamic 4.3.0+mybatis-plus 3.5.7