情况说明
一个定时任务查询数据进行汇总,查询时间大约在20-30秒,应用链接报错。
CommunicationsException: Communications link failure
The last packet successfully received from the server was 10,026 milliseconds ago.
环境
MySQL8.0
mysql-connector-java.8.0.29
druid.1.2.15
本文适用于druid.1.2.12及以上并且通过修改配置无效的情况参考。
尝试解决方案
一、修改数据库配置(没重启数据库,测试无效)
show global variables like '%TIMEOUT%'
set global WAIT_TIMEOUT=1814400; -- 28800
set global connect_timeout=100; -- 10
二、配置数据源连接信息(测试无效)
问题解决
在jdbc的URL增加
&connectTimeout=60000&socketTimeout=60000
jdbc:mysql://127.0.0.1:3306/common?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&connectTimeout=60000&socketTimeout=60000
这个版本连接池默认增加配置connectTimeout和socketTimeout,增强了SQL Parser
- 连接池DruidDataSource支持新的配置connectTimeout和socketTimeout,分别都是10秒。这个默认值会减少因为网络丢包时导致的连接池无法创建链接。