spring.datasource.hikari.max-lifetime=600000
spring.datasource.hikari.keepalive-time=60000
# MySQL: show variables like 'wait_timeout';

服务空闲一夜后第一批请求全报 Communications link failure,数据库侧显示连接已被服务端关闭。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:maxLifetime 比 MySQL 的 wait_timeout 长,连接池还当连接可用,服务端早已单方面断开。

「连接空闲被断开」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

处理上按这个顺序:把 maxLifetime 调到比 wait_timeout 小 30 秒以上;开启 keepaliveTime 定期探活;核对数据库超时配置。

确认没问题再收工,放置一夜后首批请求正常,日志里不再出现连接中断。

作者 9823189