一、简介
HikariCP是快速,简单,可靠和生产就绪的JDBC连接池。在Spring Boot 2.0版本中,默认数据库池技术已从Tomcat Pool切换到HikariCP。这是因为HikariCP提供了卓越的性能。现在自Spring Boot 2.0发布以来,spring-boot-starter-jdbc和spring-boot-starter-data-jpa默认解析HikariCP依赖,spring.datasource.type属性将HikariDataSource作为默认值。Spring引导首先选择HikariCP然后是Tomcat池,然后根据可用性选择Commons DBCP2。在这个页面上,我们将提供带有Spring Boot Data和MySQL的HikariCP的完整示例。我们将创建一个演示应用程序,我们将在其中执行数据库中的创建和读取操作。我们将配置HikariCP属性,例如文件中的connectionTimeout,minimumIdle,maximumPoolSize,idleTimeout,maxLifetime和autoCommit application.properties。
二、配置
对于Hikari连接池配置,我们通过使用spring.datasource.type并在application.properties文件中为其分配连接池实现的完全限定名称来启用它,如下所示。
spring.datasource.type = com.zaxxer.hikari.HikariDataSource
如果我们使用的是Spring Boot 2.0及以上版本,Spring Boot会HikariDataSource默认选择,我们不需要配置上面的行。
现在要配置Hikari特定的连接池设置,Spring Boot提供了spring.datasource.hikari.*在application.properties文件中使用的前缀。我们将在这里讨论一些常用的配置。
1、connectionTimeout
connectionTimeout是客户端等待连接池连接的最大毫秒数。我们需要将其配置如下。
spring.datasource.hikari.connection-timeout=20000 ;
2、minimumIdle
minimumIdle是HikariCP在连接池中维护的最小空闲连接数。它配置如下。
spring.datasource.hikari.minimum-idle=5
3、maximumPoolSize
maximumPoolSize配置最大池大小。它配置如下。
spring.datasource.hikari.maximum-pool-size=12
4、idleTimeout
idleTimeout是允许连接在连接池中空闲的最长时间(以毫秒为单位)。它配置如下。
spring.datasource.hikari.idle-timeout=300000
5、maxLifetime
maxLifetime是池中连接关闭后的最长生命周期(以毫秒为单位)。它配置如下。
spring.datasource.hikari.max-lifetime=1200000
使用中的连接永远不会退役,只有当它关闭时才会在最长生命周期后删除。
6、autoCommit
autoCommit配置从池返回的连接的默认自动提交行为。默认值为true。
spring.datasource.hikari.auto-commit=true
7、基本配置示例:
# mysql
spring.datasource.url=jdbc:mysql://{{virtual_ip}}:33306/center?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password={{db_pass}}
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
spring.datasource.timeBetweenEvictionRunsMillis=60000
# conn pool
#数据源类型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
#连接池名称,默认HikariPool-1
spring.datasource.hikari.pool-name=KevinHikariPool
spring.datasource.hikari.auto-commit=true
#最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值
spring.datasource.hikari.maximum-pool-size=16
#连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒
spring.datasource.hikari.connection-timeout=60000
#最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size
spring.datasource.hikari.minimum-idle=4
#空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
# 只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放
spring.datasource.hikari.idle-timeout=500000
#连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短
spring.datasource.hikari.max-lifetime=1200000
spring.datasource.hikari.connection-test-query=SELECT 1
三、解决异常信息
com.zaxxer.hikari.pool.PoolBase[176] - KevinHikariPool - Failed to validate connection com.mysql.jdbc.JDBC4Connection@69154079 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
配置:
spring.datasource.hikari.max-lifetime=1200000