Spring boot下使用Druid完成多数据源访问简单配置

什么是Druid?

Druid是阿里出的JDBC组件库,包括数据库连接池、SQL Parser等组件。
Druid的Github地址是 https://github.com/alibaba/druid


使用Druid完成多数据源访问需要以下步骤

  • 项目中添加Druid
  • application.yml的配置
  • DataSource、DataSourceTransactionManager、SqlSessionFactory以及SqlSessionTemplate的配置

本文使用的工具是IDEA,使用maven作为项目管理工具,使用sqlserver数据库

在项目中添加Druid的依赖

1
2
3
4
5
6
7
8
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>

在application.yml配置数据库连接信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
spring:
# DATASOURCE
datasource:
type: com.alibaba.druid.pool.DruidDataSource
db1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://192.0.0.1:1433;Database=DB1
username: root
password: root
db2:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://192.0.0.1:1433:1433;Database=DB2
username: root
password: root

创建BaseDataSourceConfig配置类配置四个数据项

这里使用了给每一个数据源分别建立DataSourceConfig的方式,也可以使用其他方式,这里不做额外说明了

此处内容参考了 acquaintanceship 的文章

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import javax.sql.DataSource; //DataSource使用javaax.sql的

@Configuration
@MapperScan(basePackages = "org.uki.dao.db1", sqlSessionTemplateRef = "baseSqlSessionTemplate") //basePackages对应使用db1数据源的dao文件包名
public class db1DataSourceConfig {

@Bean(name = "db1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.db1") //这里填写application.yml里对应的数据源信息
@Primary //当有多个数据源时,需要对主数据源增加@Primary描述
public DataSource setDataSource() {
return new DruidDataSource();
}

@Bean(name = "db1TransactionManager")
@Primary
public DataSourceTransactionManager setTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

@Bean(name = "db1SqlSessionFactory")
@Primary
public SqlSessionFactory setSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:**/db1/*.xml"));
return bean.getObject();
}

@Bean(name = "db1SqlSessionTemplate")
@Primary
public SqlSessionTemplate setSqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}


完成以上内容后,只需要把Dao文件放到对应的扫描包中就可以使用多数据源了