springbootalreadyHiKariCP

Springboot整合HikariCP连接池(六)

2020-04-13  本文已影响0人  晚风吹___

一、什么是 HikariCP

HiKariCP 是数据库连接池的一个后起之秀,号称性能最好,可以完美地 PK 掉其他连接池。是一个高性能的 JDBC 连接池,基于 BoneCP 做了不少的改进和优化。超快,快到连 Spring Boot 2 都宣布支持了。

官方 GitHub 地址

二、为什么需要 HikariCP

BoneCP在Github 项目主页推荐大家使用 HikariCP,Hikari(ひかり[shi ga li]) 来自日文,是 的意思。这个产品的口号是 快速、简单、可靠

优化

代码量

几个连接池的代码量对比(代码量越少,一般意味着执行效率越高、发生 BUG 的可能性越低)

Pool Files Code
Vibur 34 1927
HikariCP 21 2228
Tomcat 31 6345
BoneCP 49 7293
C3P0 120 15550

可靠性

另外,关于可靠性方面,也是有实验和数据支持的。对于数据库连接中断的情况,通过测试 getConnection(),各种 CP 的不相同处理方法如下(所有 CP 都配置了跟 connectionTimeout 类似的参数为 5 秒钟)

三、整合 HikariCP

POM

<!-- 主要增加 HikariCP 依赖 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>${hikaricp.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <exclusions>
        <!-- 排除 tomcat-jdbc 以使用 HikariCP -->
        <exclusion>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
</dependency>

application.yml

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/boot_db?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: root
    hikari:
      # 是客户端等待连接池连接的最大毫秒数
      connection-timeout: 30000
      # 是允许连接在连接池中空闲的最长时间
      minimum-idle: 10
      # 配置最大池大小
      maximum-pool-size: 65
      # 是允许连接在连接池中空闲的最长时间(以毫秒为单位)
      idle-timeout: 60000
      # 池中连接关闭后的最长生命周期(以毫秒为单位)
      max-lifetime: 600000
      # 配置从池返回的连接的默认自动提交行为。默认值为true。
      auto-commit: true
      # 连接池的名称
      pool-name: MyHikariCP
      # 开启连接监测泄露
      leak-detection-threshold: 5000
      # 测试连接数据库
            connection-test-query: SELECT 1

四、HikariCP 默认配置

1、说明

HikariCP 有两部分的参数有两部分组成

2、常用参数配置

属性 默认值 说明
autoCommit true 自动提交从池中返回的连接
connectionTimeout 30000 等待来自池的连接的最大毫秒数
maxLifetime 1800000 池中连接最长生命周期如果不等于0且小于30秒则会被重置回30分钟
minimumIdle 10 池中维护的最小空闲连接数 minIdle<0或者minIdle>maxPoolSize,则被重置为maxPoolSize
maximumPoolSize 10 池中最大连接数,包括闲置和使用中的连接
metricRegistry null 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置
healthCheckRegistry null 报告当前健康信息
poolName HikariPool-1 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置
idleTimeout 是允许连接在连接池中空闲的最长时间

个人建议

  1. minimumIdle,建议使用默认值,小于maximumPoolSize值

  2. 连接空闲时间idleTimeout生效,重发频率为60多秒,值可设为1分钟,减少空闲连接占用,尽快释放数据库连接

  3. 连接生命周期maxLifetime值设为10分钟,低于数据库超时时长,尽快释放数据库无效连接

  4. 增加连接池的用户定义名称

  5. 开启连接监测泄露leakDetectionThreshold方法,此属性控制在记录消息之前连接可能离开池的时间量,表明可能的连接泄漏。

上一篇下一篇

猜你喜欢

热点阅读