SpringBoot配置MySQL多数据源

1、先配置数据库连接文件

在连接文件中,设置多个数据库连接

@Configuration
public class DataSourceConfig {
    @Primary    // 设置为主数据库
    @Bean(name="AAA")
    @ConfigurationProperties(prefix = "spring.datasource.AAA")
    public DataSource coldChainReadDataSource(){
        return DataSourceBuilder.create(DruidDataSource.class.getClassLoader()).build();  // 这里使用了阿里巴巴的数据库连接池Druid
    }

    @Bean(name="BBB")
    @ConfigurationProperties(prefix = "spring.datasource.BBB")
    public DataSource coldChainWriteDataSource(){
        return DataSourceBuilder.create(DruidDataSource.class.getClassLoader()).build();
    }
}

2、AAA数据库连接配置文件

@Configuration
@MapperScan(basePackages = {"com.xx.xx.xx.AAA"},sqlSessionTemplateRef = "loadrSqlSessionTemplate")
public class MyBatisLoadReadConfig {
    @Autowired
    @Qualifier("AAA")  // 其他都一样,只要点在这里,加载不同的数据连接配置
    private DataSource dataSource;
 
    @Value("${spring.datasource.AAA.jdbcUrl}")
    private String jdbcUrl;
    
    @Bean
    public SqlSessionFactory loadrSqlSessionFactory() throws Exception{
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resource=resolver.getResources("classpath:com/xx/xx/xx/AAA/*/*.xml");    // 配置xml路径
        sqlSessionFactoryBean.setMapperLocations(resource);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.xx.xx.model"); // 配置数据返回实体包路径
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{new MybatisInterceptor(jdbcUrl)});    // 设置数据库sql检测插件,主要用户sql检测的。不需要sql中间件的,可以不用设置
        return sqlSessionFactoryBean.getObject();
    }
 
    @Bean
    public SqlSessionTemplate loadrSqlSessionTemplate() throws Exception{
        SqlSessionTemplate sqlSessionTemplate=new SqlSessionTemplate(loadrSqlSessionFactory());
        return sqlSessionTemplate;
    }

    // 事务管理器
    @Bean(name = "loadrTransactionManager")
    public DataSourceTransactionManager loadrTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}

3、BBB数据库连接配置文件

@Configuration
@MapperScan(basePackages = {"com.xx.xx.xx.BBB"},sqlSessionTemplateRef = "loadrSqlSessionTemplate")
public class MyBatisLoadReadConfig {
    @javax.annotation.Resource(name = "BBB")
    private DataSource dataSource;
 
    @Value("${spring.datasource.BBB.jdbcUrl}")
    private String jdbcUrl;
    
    @Bean
    public SqlSessionFactory loadrSqlSessionFactory() throws Exception{
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resource=resolver.getResources("classpath:com/xx/xx/xx/BBB/*/*.xml");    // 配置xml路径
        sqlSessionFactoryBean.setMapperLocations(resource);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.xx.xx.model"); // 配置数据返回实体包路径
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{new MybatisInterceptor(jdbcUrl)});    // 设置数据库sql检测插件,主要用户sql检测的
        return sqlSessionFactoryBean.getObject();
    }
 
    @Bean
    public SqlSessionTemplate loadrSqlSessionTemplate() throws Exception{
        SqlSessionTemplate sqlSessionTemplate=new SqlSessionTemplate(loadrSqlSessionFactory());
        return sqlSessionTemplate;
    }

    // 事务管理器
    @Bean(name = "loadrTransactionManager")
    public DataSourceTransactionManager loadrTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}

=============再多的,以此类推===============

注意:@MapperScan(basePackages = {"com.xx.xx.xx.BBB"})设置的时候要避免出现设置子包情况,如果出现子包设置,会导致扫包重复,从而导致Invalid bound statement (not found)问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近在学习SpringBoot的一些知识,主要是参考了纯洁的微笑的一些博客作为练手,想着他已经把入门的教程写的很详...
    毛福林阅读 1,966评论 1 7
  • 简介 主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整合,和 springboo...
    Gojo99阅读 661评论 0 0
  • 一、简述 配置多数据源意思就是在一个项目中使用多个数据库,在项目使用中可以不用手动切换数据库来实现不同数据库的数据...
    与李_han阅读 179评论 0 0
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,570评论 0 13
  • 感觉自己有点神经衰弱,总是觉得手机响了;屋外有人走过;每次妈妈不声不响的进房间突然跟我说话,我都会被吓得半死!一整...
    章鱼的拥抱阅读 2,482评论 4 5

友情链接更多精彩内容