spring boot 多數據源配置(多種數據庫)

最近一段時間在使用spring boot開發項目,其中有一個項目用到了多數據源的配置,網上的資料仍是不太多,走了好多才找到一個合適的,把本身寫的分享一下,作個筆記,之後也許有用,第一次寫博客,很差勿噴!!mysql

首先介紹下個人業務場景,此項目用到了兩種數據庫,一個是mysql,另外一個是sqlserver,spring

首先第一步須要在application.yml中將多數據源的配置信息進行配置,sql

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();
}
}
至此多數據源的配置都已經完成,其餘配置跟但數據源的配置時同樣的,不在贅述。。。
相關文章
相關標籤/搜索