当前位置:   article > 正文

springBoot - mybatis 多数据源实现方案

springBoot - mybatis 多数据源实现方案

应用场景: 

        多数据源 小型项目 或者 大项目的临时方案中比较常用.在日常开发中,可能我们需要查询多个数据库,但是数据库实例不同,导致不能通过 指定schema的方式 区分不同的库, 这种情况下就需要我们应用程序配置多数据源

实现方式: 

  • 首先自定义实现 datasource数据源

  • 为当前数据源添加一些配置信息 例如: mapper 文件扫描地址

  • 暴露SqlSessionTemplate 


  1. package com.cloud.config;
  2. import org.apache.ibatis.session.SqlSessionFactory;
  3. import org.mybatis.spring.SqlSessionFactoryBean;
  4. import org.mybatis.spring.SqlSessionTemplate;
  5. import org.mybatis.spring.annotation.MapperScan;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.boot.context.properties.ConfigurationProperties;
  8. import org.springframework.boot.jdbc.DataSourceBuilder;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.context.annotation.Primary;
  12. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  13. import javax.sql.DataSource;
  14. import java.io.IOException;
  15. @Configuration
  16. @MapperScan(value = {"com/cloud/dict/mapper"}, sqlSessionFactoryRef = "klinSqlSessionFactory")
  17. public class KlinDataSourceConfig {
  18. @Bean
  19. @ConfigurationProperties(prefix = "spring.datasource.klin")
  20. DataSource klin() {
  21. return DataSourceBuilder.create().build();
  22. }
  23. @Bean
  24. SqlSessionFactory klinSqlSessionFactory(@Qualifier("klin") DataSource dataSource) throws Exception {
  25. SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
  26. sqlSessionFactoryBean.setDataSource(dataSource);
  27. // 指定多数据源 mapper 文件扫描路径,类似yml文件中 mapper-locations: classpath:/mapper/*.xml
  28. sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/klin/*.xml"));
  29. return sqlSessionFactoryBean.getObject();
  30. }
  31. @Bean
  32. SqlSessionTemplate klinSqlSessionTemplate(@Qualifier("klinSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
  33. return new SqlSessionTemplate(sqlSessionFactory);
  34. }
  35. }

为当前系统指定默认数据库 只需要在datasource 的bean上面添加@primary 注解就可以

  1. package com.cloud.config;
  2. import org.apache.ibatis.session.SqlSessionFactory;
  3. import org.mybatis.spring.SqlSessionFactoryBean;
  4. import org.mybatis.spring.SqlSessionTemplate;
  5. import org.mybatis.spring.annotation.MapperScan;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.boot.context.properties.ConfigurationProperties;
  8. import org.springframework.boot.jdbc.DataSourceBuilder;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.context.annotation.Primary;
  12. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  13. import javax.sql.DataSource;
  14. @Configuration
  15. // 扫描接口路径
  16. @MapperScan(value = {"com/cloud/sys/dao", "com/cloud/person/dao", "com/cloud/batch/dao"}, sqlSessionFactoryRef = "firstSqlSessionFactory")
  17. public class FirstDataSourceConfig {
  18. @Bean
  19. @ConfigurationProperties(prefix = "spring.datasource.first")
  20. @Primary
  21. DataSource first() {
  22. return DataSourceBuilder.create().build();
  23. }
  24. @Bean
  25. SqlSessionFactory firstSqlSessionFactory(@Qualifier("first") DataSource dataSource) throws Exception {
  26. SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
  27. sqlSessionFactoryBean.setDataSource(dataSource);
  28. // 指定多数据源 mapper 文件扫描路径,类似yml文件中 mapper-locations: classpath:/mapper/*.xml
  29. sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/first/*.xml"));
  30. return sqlSessionFactoryBean.getObject();
  31. }
  32. @Bean
  33. SqlSessionTemplate firstSqlSessionTemplate(@Qualifier("firstSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
  34. return new SqlSessionTemplate(sqlSessionFactory);
  35. }
  36. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/57404
推荐阅读
相关标签
  

闽ICP备14008679号