首先引入配置
<dependencies>
<!--实现对数据源的默认配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql数据源-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
添加配置
# 应用名称
spring:
application:
name: spring-boot-datasource
datasource:
#user数据源
user:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 479368
hikari:
minimum-idle: 10
maximum-pool-size: 10
#admin数据源
admin:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 479368
hikari:
minimum-idle: 10
maximum-pool-size: 10
server:
port: 8001
具体配置类
/**
* HikariCP数据库连接池多数据源配置入门
*/
@Configuration
public class DatasourceConfig {
/**
* 由于在自定义配置中我们添加了user、admin字段,所以在通过@ConfigurationProperties批量属性赋值时应当注意层级关系,
* 以及被赋值的对象中是否有对应的字段映射,如果有则可以对应匹配,如果没有则不行
* DataSourceProperties中有spring.datasource.user层级的字段,所以在测出赋值给DataSourceProperties配置文件
* 而spring.datasource.user.hikari层级的字段DataSourceProperties中没有所以不能将此层级的字段赋值给DataSourceProperties
*/
/**
* 创建 user 数据源配置对象
* 读取前缀spring.datasource.user的数据配置到DataSourceProperties对象、注入容器并命名为userDataSourceProperties
* @Primary 表示默认项
* @return
*/
@Primary
@Bean(name = "userDataSourceProperties")
@ConfigurationProperties(prefix = "spring.datasource.user")
public DataSourceProperties userDataSourceProperties(){
return new DataSourceProperties();
}
/**
* 创建 user 数据源
* @return
*/
/**
* 此处返回的时DataSource对象,这里使用DataSource的实现类HikariDataSource作为最终的返回对象,通过查看源码可以发现
* HikariDataSource继承类HikariConfig类中有Hikari数据连接池配置是的所有字段,所以我可以在此处进行spring.datasource.user.hikari
* 层级的字段批量赋值。特别提醒批量赋值需要注意是否有字段对应。
* @return
*/
@Bean(name = "userDataSource")
@ConfigurationProperties(prefix = "spring.datasource.user.hikari")
public DataSource userDataSource(){
//首先获取DataSourceProperties数据源配置对象
DataSourceProperties properties = this.userDataSourceProperties();
//创建HikariDataSource数据源对象
return createDateSource(properties);
}
/**
* 创建 admin 数据源配置对象
* @return
*/
@Bean(name = "adminDataSourceProperties")
@ConfigurationProperties(prefix = "spring.datasource.admin")
public DataSourceProperties adminDataSourceProperties(){
return new DataSourceProperties();
}
@Bean(name = "adminDataSource")
@ConfigurationProperties(prefix = "spring.datasource.admin.hikari")
public DataSource adminDataSource(){
DataSourceProperties properties = this.adminDataSourceProperties();
return createDateSource(properties);
}
public static DataSource createDateSource(DataSourceProperties properties){
//首先根据配置,创建HikariDataSource数据源对象,通过构造这模式创建
HikariDataSource hikariDataSource = properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
//设置线程池名,此处参考官网
if (StringUtils.hasText(properties.getName())) {
hikariDataSource.setPoolName(properties.getName());
}
return hikariDataSource;
}
}