Administrator
发布于 2024-08-11 / 6 阅读
0
0

Hikari Conn Pool

连接池

我们常用的连接池,一般是Hikari连接池。

背景

问题如下:


nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. 
Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; 
nested exception is java.sql.SQLTransientConnectionException: 76d843a4-94ba-47dc-9334-e9fefbfdd1a9_pcm - Connection is not available, request timed out after 30042ms. 
### The error may exist in URL [jar:file:/opt/Pcm/pcm-server-manage.jar!/BOOT-INF/lib/pcm-module-main-biz-2.3.0.jar!/mapper/ProjectStatusReportPOMapper.xml]
 ### The error may involve com.jshxhb.module.main.biz.mapper.ProjectStatusReportPOMapper.selectByExample 
 ### The error occurred while executing a query ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: 
 Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: 
76d843a4-94ba-47dc-9334-e9fefbfdd1a9_pcm - Connection is not available, request timed out after 30042ms.

可以看到,报错信息显示:Connection is not available, request timed out after 30042ms.

下面,我们基于这个连接超时的报错,开始进入Hikari 连接池的领域。

连接的各步骤 及 对应的配置参数

image-20240812072659970

下面,我们看下,配置参数,是怎么来的?以及默认值是多少?

配置参数,主要来自于HikariConfig 这个类,默认值,也是在这个类中定义的,如下:

image-20240812072903961

可以看到,在这里定义了很多常量,这些常量,都是连接的配置参数的默认值

image-20240812073103999

connectionTimeout:等待时间,客户端从连接池中,获取可用的connection的等待时间。 如果没有可用连接的情况下,等待时间超过此时间,则会抛出SQLException,Connection is not available, request timed out after 30042ms.

定时任务

HikariPool中,有3个定时任务:

com.zaxxer.hikari.pool.HikariPool.HouseKeeper
com.zaxxer.hikari.pool.HikariPool.MaxLifetimeTask
com.zaxxer.hikari.pool.HikariPool.KeepaliveTask

其中,HouseKeeper的作用,是保证连接数,维持在minIdle 和 max-pool-size之间

MaxLifetimeTask的作用,是保证连接,不会超过保质日期

KeepaliveTask的作用,是对连接,进行探活,防止连接被mysql关闭了,但是客户端还以为连接是可用的。

Best Practise

{"connectionTimeout":30000,"maxLifetime":1800000,"keepaliveTime":180000,"maxPoolSize":5,"minIdle":3}

参考资料

配置参数,如下:
https://www.cnblogs.com/newAndHui/p/13723250.html

https://www.modb.pro/db/215198

连接保活 & 探活,如下:

https://ayonel.github.io/2020/08/18/hikari-keeplive/

https://blog.csdn.net/m0_46485771/article/details/118583714

https://developer.jdcloud.com/article/3257

hikari连接的归还:
https://blog.csdn.net/Shang_q_f/article/details/119302075

为HikariCP配置MetricRegistry监控:
https://www.codeleading.com/article/13236300745/#google_vignette

https://blog.csdn.net/abu935009066/article/details/127155653

org.springframework.boot.actuate.autoconfigure.metrics.jdbc.DataSourcePoolMetricsAutoConfiguration.HikariDataSourceMetricsConfiguration

MicrometerMetricsTracker


评论