spring boot 多数据源配置(多种数据库)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot 多数据源配置(多种数据库)相关的知识,希望对你有一定的参考价值。

最近一段时间在使用spring boot开发项目,其中有一个项目用到了多数据源的配置,网上的资料还是不太多,走了好多才找到一个合适的,把自己写的分享一下,做个笔记,以后也许有用,第一次写博客,不好勿喷!!

首先介绍下我的业务场景,此项目用到了两种数据库,一个是mysql,另一个是sqlserver,

首先第一步需要在application.yml中将多数据源的配置信息进行配置,

mysql数据源:

spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.28.230:3306/****?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
username: ****
password: ****

sqlserver数据源配置
custom:
datasource:
names: ds1
ds1:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://ip:1433;databaseName=数据库名称
username: ****
password: ****

第二步编写数据源的配置和加载类:
SQLserver数据源
@Configuration
@MapperScan(basePackages = RdsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "rdsSessionFactory")
public class RdsDataSourceConfig {
static final String PACKAGE = "com.jyall.ehr.kaoqin"; //本项目中用的是mybatis,此路径为扫描的mapper的包结构
@Value("${custom.datasource.ds1.url}") //第一步中配置文件中的数据库配置信息
private String dbUrl;
@Value("${custom.datasource.ds1.username}")//同理为配置文件中信息
private String dbUser;
@Value("${custom.datasource.ds1.password}")//同理为配置文件信息
private String dbPassword;

@Bean(name = "rdsDatasource")
public DataSource rdsDataSource() {
DataSource dataSource = new DataSource();
dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
dataSource.setUrl(dbUrl);
dataSource.setUsername(dbUser);
dataSource.setPassword(dbPassword);
return dataSource;
}

@Bean(name = "rdsTransactionManager")
public DataSourceTransactionManager rdsTransactionManager(@Qualifier("rdsDatasource") DataSource adsDataSource) {
return new DataSourceTransactionManager(rdsDataSource());
}

@Bean(name = "rdsSessionFactory")
public SqlSessionFactory adsSqlSessionFactory(@Qualifier("rdsDatasource") DataSource adsDataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(adsDataSource);
return sessionFactory.getObject();
}
}

mysql数据源
@Configuration
@MapperScan(basePackages = AdsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "adsSqlSessionFactory")
public class AdsDataSourceConfig {
static final String PACKAGE = "com.jyall.ehr.mapper"; //扫描的mapper包结构

@Value("${spring.datasource.url}") //配置文件中的配置
private String dbUrl;
@Value("${spring.datasource.username}") //配置文件中的配置
private String dbUser;
@Value("${spring.datasource.password}") //配置文件中的配置
private String dbPassword;

@Bean(name = "adsDataSource")
@Primary //此注解表示在默认的数据源配置,即在默认配置时用到的数据源配置
public DataSource adsDataSource() {
DataSource dataSource = new DataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(dbUrl);
dataSource.setUsername(dbUser);
dataSource.setPassword(dbPassword);
return dataSource;
}

@Bean(name = "adsTransactionManager")
@Primary
public DataSourceTransactionManager adsTransactionManager(@Qualifier("adsDataSource") DataSource adsDataSource) {
return new DataSourceTransactionManager(adsDataSource);
}

@Bean(name = "adsSqlSessionFactory")
@Primary
public SqlSessionFactory adsSqlSessionFactory(@Qualifier("adsDataSource") DataSource adsDataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(adsDataSource);
return sessionFactory.getObject();
}
}
至此多数据源的配置都已经完成,其他配置跟但数据源的配置时一样的,不在赘述。。。

以上是关于spring boot 多数据源配置(多种数据库)的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot配置多数据源

Spring Boot多数据源配置与使用

Spring Boot 多数据源配置

spring boot动态数据源配置如何配置

spring boot 配置多数据源

Spring Boot + MyBatis + Pagehelper 配置多数据源