springboot 多数据源配置

1、application-dev.properties中配置多个数据源

主数据源

spring.datasource.primary.jdbc-url=jdbc:sqlserver:
spring.datasource.primary.username=
spring.datasource.primary.password=
spring.datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.primary.type=com.alibaba.druid.pool.DruidDataSource

第二数据源

spring.datasource.hosiptal.jdbc-url=jdbc:sqlserver://
spring.datasource.hosiptal.username=
spring.datasource.hosiptal.password=
spring.datasource.hosiptal.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.hosiptal.type=com.alibaba.druid.pool.DruidDataSource

2、建立数据库配置文件

主数据源配置文件

/**
 * @Author: wyk
 * @Date: 2020/10/27
 * @Description:主数据库连接
 */
//表示这个类为一个配置类
@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "cn.hele.emr.dao.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {
    // 将这个对象放入Spring容器中
    @Bean(name = "primaryDataSource")
    // 表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource getDateSource1() {
        return DataSourceBuilder.create().build();
    }

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

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

第二数据源配置

/**
 * @Author: wyk
 * @Date: 2020/10/27
 * @Description:第二数据库
 */
@Configuration
@MapperScan(basePackages = "cn.hele.emr.dao.hospital", sqlSessionFactoryRef = "hospitalSqlSessionFactory")
public class HospitalDataSourceConfig {
    @Bean(name = "hospitalDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.hospital")
    public DataSource getDateSource2() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "hospitalSqlSessionFactory")
    public SqlSessionFactory test2SqlSessionFactory(@Qualifier("hospitalDataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:mapper/pac/hospital/.xml"));
        return bean.getObject();
    }

    @Bean("hospitalSqlSessionTemplate")
    public SqlSessionTemplate test2sqlsessiontemplate(
            @Qualifier("hospitalSqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

注意

1、@Primary这个注解必须要加,因为不加的话spring将分不清楚那个为主数据源(默认数据源)

2、mapper的接口、xml形式以及dao层都需要两个分开,配置文件路径保持一致

3、使用spring.datasource.hosiptal.jdbc-url 代替spring.datasource.hosiptal.url

经验分享 程序员 微信小程序 职场和发展