springboot+mybatis 整合多数据源

本文章使用SpringBoot版本是1.5.3.RELEASE
老规矩还是先贴项目结构:
在这里插入图片描述
业务代码部分不做过多说明,下面主要讲解配置文件:
1.yml文件

server:
  port: 8072

spring:
  datasource:
    test1:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/test1
      username: root
      password: root
    test2:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/test2
      username: root
      password: root

mybatis:
  type-aliases-package: com.demo.User1.User1
  mapper-locations:
  - mapper/*

2.主数据源配置

//  表示这个类为一个配置类
@Configuration
//  配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.demo.mapper.test1mapper", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class test1DataSourcConfig {

    // 将这个对象放入Spring容器中
    @Bean(name = "test1DataSource")
    // 表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource test1DataSource(){
        return DataSourceBuilder.create().build();
    }


    @Bean(name = "test1SqlSessionFactory")
    // 表示这个数据源是默认数据源
    @Primary
    // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource")DataSource datasource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test1/*.xml"));
        return bean.getObject();
    }


    @Bean("test1SqlSessionTemplate")
    // 表示这个数据源是默认数据源
    @Primary
    @Qualifier("test1SqlSessionFactory")
    public SqlSessionTemplate test1sqlsessiontemplate(SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

3.从数据源配置

@Configuration
@MapperScan(basePackages = "com.demo.mapper.test2mapper", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class test2DataSourcConfig {

    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource test2DateSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory test2SqlSessionFactory(@Qualifier("test2DataSource")DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test2/*.xml"));
        return bean.getObject();
    }
    @Bean("test2SqlSessionTemplate")
    @Qualifier("test2SqlSessionFactory")
    public SqlSessionTemplate test2sqlsessiontemplate(SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

下面可以做一个简单的试验,test1和test2是我事先准备好的两个不同的库:在这里插入图片描述
在这里插入图片描述
通过请求两个接口,可以看到从不同的库中拿到了对应的数据
在这里插入图片描述
在这里插入图片描述
本篇文章代码已上传至github,有需要的同学可自行前往查看或下载!

猜你喜欢

转载自blog.csdn.net/lt326030434/article/details/90215829