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
