Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
noroadzh opened this issue Apr 15, 2019 · 12 comments

Comments

@noroadzh
Copy link

noroadzh commented Apr 15, 2019

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

  • Step 1

  • Step 2

  • Step 3

@noroadzh noroadzh changed the title @DS数据源未匹配成功时,不管如何设置都是使用默认的primary的库 @DS数据源未匹配成功,不管如何设置都是使用默认的primary的库 Apr 15, 2019
@huayanYu
Copy link
Member

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

@huayanYu
Copy link
Member

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

@noroadzh
Copy link
Author

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

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

@noroadzh
Copy link
Author

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

@DoyuTu
Copy link
Contributor

DoyuTu commented Apr 19, 2019

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

@noroadzh
Copy link
Author

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

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

@noroadzh
Copy link
Author

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

@ynp
Copy link

ynp commented Aug 27, 2019

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

@rw12306
Copy link

rw12306 commented Jan 14, 2021

我是有一个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
Copy link

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

@lishaopeng221
Copy link

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

@xiawei520
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants