Spring Boot 数据库连接池入门之HikariCP

首先引入配置

    <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;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值