一、背景

Hikari作为数据库连接池,在使用的过程中偶发的出现以下异常

Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

MySQL的CommunicationsException异常_连接池

导致该错误的常有两种原因

1.  数据库重启了

2.  客户端的连接长期处于空闲状态,数据库关闭连接


二、Hikari常用配置

在继续前,先了解下HikariCP连接池的几个配置项

MySQL的CommunicationsException异常_连接池_02

idleTimeout和maxLifetime会直接影响到何时将连接从连接池移除。


三、问题的解

以上的异常问题,在HikariCP的wiki中有提到

MySQL的CommunicationsException异常_连接池_03

意思是:将 HikariCP的idleTimeout和maxLifeTime配置为比MySQL的wait_timeout少一分钟。

地址:https://github.com/brettwooldridge/HikariCP/wiki/FAQ#q2

首先,查看MySQL的配置

MySQL的CommunicationsException异常_连接池_04

其wait_timeout为30分钟,按照wiki所说,我们调整以下的配置

1)idle-timeout、max-lifetime都改成29分钟:1740000 (毫秒)

同时,删除配置minimum-idle