springboot+mybatis-plus项目集成多数据源

项目场景:

springboot+mybatis-plus项目集成多数据源


多数据源集成方案:

目前网络上关于mybatis-plus集成多数据源有两种方案,具体实现方式可参考以下链接
(1)第一种是mybatis-plus官方提供的
参考链接: https://baomidou.com/guide/dynamic-datasource.html
(2)第二种结合阿里的druid的解决方案
参考链接: https://www.cnblogs.com/hsbt2333/p/9347249.html
这个链接里有个bug,需要注意一下,再进行MyBatisPlusConfiguration.java修改的时候

sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“classpath:/mapper/*/*Mapper.xml”));
这块代码的时候是必须打开的,不需要注释
使用这种方案的时候再application.yml中配置的mybatis-plus 属性是不生效的,必须在此处进行xml的加载,否则再访问的时候会报找不到对应的mapper映射

@Bean("sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(multipleDataSource(db1(),db2()));
        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/*/*Mapper.xml"));

        MybatisConfiguration configuration = new MybatisConfiguration();
        //configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
        configuration.setJdbcTypeForNull(JdbcType.NULL);
        configuration.setMapUnderscoreToCamelCase(true);
        configuration.setCacheEnabled(false);
        sqlSessionFactory.setConfiguration(configuration);
        sqlSessionFactory.setPlugins(new Interceptor[]{ //PerformanceInterceptor(),OptimisticLockerInterceptor()
                paginationInterceptor() //添加分页功能
        });
        //sqlSessionFactory.setGlobalConfig(globalConfiguration());
        return sqlSessionFactory.getObject();
    }

问题描述:

 笔者采用的是mybatis-plus方案,这种方案改动量比较少,而且mybatis-plus的配置也不会失效,
 但是在使用的时候@DS ,发现只在controller里生效,再service或方法里不生效,很奇怪

原因分析:

在这里插入图片描述

经查找资料发现是否shiro有关系,本项目的权限采用的Shiro,在自定义实现AuthorizingRealm的SpringShiroRelam类中,使用了service注解类 spring默认注入顺序先执行@Configuration,在配置类ShiroConfig里面进行注入UserRelam,启动初期,Sping完成了没有被代理对象的Service实例注入, 从而导致了service类的注解没有生效

解决方案:

在这里插入图片描述

给注入的Sevice类加上 @Lazy注解后,自定义切面在Service层也正常使用了。 而@Lazy注解用于bean的延迟加载,在@Component组件或其@Bean初始化方法上使用,来创建一个所有受影响的依赖项的延迟解析代理,从而确保动态代理完成了再执行依赖注入。

但是我的项目加上这个注解后,@ds注解有的地方管用,有的地方不管用,由于我这是个子系统,不用验证登陆,我直接把shiroRealm文件删除了,问题就解决了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值