当前位置:   article > 正文

SpringBoot整合 HikariCP_springboot整合hikaricp

springboot整合hikaricp

概述

HiKariCP (opens new window)是数据库连接池的一个后起之秀,号称性能最好,可以完美地 PK 掉其他连接池。Hikari(ひかり[shi ga li]) 来自日文,是 光 的意思,这个产品的口号是 快速、简单、可靠。总得来说,它是一个高性能的 JDBC 连接池,基于 BoneCP 做了不少的改进和优化,就连 BoneCP 作者放弃维护,在Github 项目主页推荐大家使用 HikariCP。(BoneCP 在快速这个特点上做到了极致,例如是C3P0的25倍左右)

HiKariCP 从 Spring Boot 2.x 后纳入为默认的数据连接池

HiKariCP 特性

  • 字节码精简 : 优化代码,直到编译后的字节码最少,这样,CPU 缓存可以加载更多的程序代码
  • 优化代理和拦截器 : 减少代码,例如 HikariCP 的 Statement proxy 只有 100 行代码,只有 BoneCP 的十分之一
  • 自定义数组类型(FastStatementList)代替 ArrayList : 避免每次 get() 调用都要进行 range check,避免调用 remove() 时的从头到尾的扫描
  • 自定义集合类型(ConcurrentBag): 提高并发读写的效率
  • 其他针对 BoneCP 缺陷的优化: 比如对于耗时超过一个 CPU 时间片的方法调用的研究(但没说具体怎么优化)

常用参数配置

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

建议:

  • minimumIdle,建议使用默认值,小于maximumPoolSize值。
  • 连接空闲时间idleTimeout生效,重发频率为60多秒,值可设为1分钟,减少空闲连接占用,尽快释放数据库连接。
  • 连接生命周期maxLifetime值设为10分钟,低于数据库超时时长,尽快释放数据库无效连接。
  • 增加连接池的用户定义名称。
  • 开启连接监测泄露leakDetectionThreshold方法,此属性控制在记录消息之前连接可能离开池的时间量,表明可能存在的连接泄漏。

示例

maven依赖

<!-- 主要增加 HikariCP 依赖 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

application.yml

spring:
  #配置数据源
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db_wego?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&useUnicode=true
    username: root
    password: root
    hikari:
      # 是允许连接在连接池中空闲的最长时间
      minimum-idle: 5
      # 是允许连接在连接池中空闲的最长时间(以毫秒为单位)
      idle-timeout: 600000
      # 配置最大池大小
      maximum-pool-size: 10
      # 配置从池返回的连接的默认自动提交行为。默认值为true
      auto-commit: true
      # 连接池的名称
      pool-name: MyHikariCP
      # 池中连接关闭后的最长生命周期(以毫秒为单位)
      max-lifetime: 1800000
      # 是客户端等待连接池连接的最大毫秒数
      connection-timeout: 30000
      # 开启连接监测泄露
      leak-detection-threshold: 5000
      # 测试连接数据库
      connection-test-query: SELECT 1
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/160548
推荐阅读
相关标签
  

闽ICP备14008679号