天天看点

mybatis多数据源配置_SpringBoot+Mybatis配置多数据源的踩坑记录

关于如何配置springboot+mybatis的多数据源,网上有很多类似的文章,我主要参考的是 这一篇文章,按照文章中作者的步骤是能配置成功的,其实最核心的要点就是将之前我们在application.yml中写几行配置的步骤变成我们自己使用javaConfig的方式手动将springboot和mybatis整合起来,不过一些在application.yml中的配置是不会生效的,还是得我们自己在JavaConfig中配置,然后坑就来了...

比如mybatis配置自动驼峰命名转换,在application.yml文件中是这样配置的:

mybatis:
  configuration:
    map-underscore-to-camel-case: true
           

idea输入"cam",第一个提示就是,然后按2下回车就能搞定了,使用JavaConfig的方式也不复杂,是需要配置SqlSessionFactoryBean的一个属性就行了。还有mapper xml文件的扫描路径也是

/**
     * 创建 SqlSessionFactory
     */
    @Bean(name = "db1SqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // 配置mapper xml文件的扫描路径
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
        // 配置自动驼峰命名转换
        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        return bean.getObject();
    }
           

注意!坑来了!!!

bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));

这一行代码,也就是配置mapper xml文件的扫描路径的代码,必须在这一行:

bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);

也就是配置自动驼峰命名转换的代码之前!

我一开始反过来的,然后启动完成后倒没什么问题,可是一访问sql写在mapper.xml文件里的接口就会报这么一个很诡异的异常 ↓ ,偏偏访问写在sql注解的那个却没问题

mybatis多数据源配置_SpringBoot+Mybatis配置多数据源的踩坑记录

然后你去谷歌或者百度搜

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

,你会发现基本上对解决这个情景下出现的问题基本上没什么卵用

然后我看了下这篇文章, 发现作者留的代码示例能跑通,事已至此,还能咋办?既然他的代码能跑通,那就把我的代码和他的代码一行行的比较呗,终于花了将近2个小时总算是找到了上面那个坑......

继续阅读