情况说明
一个定时任务查询数据进行汇总,查询时间大约在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
Releases · alibaba/druid · GitHub阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池 - Releases · alibaba/druidhttps://github.com/alibaba/druid/releases
Druid 1.2.12版本发布,连接池默认指定socketTimeout,增强SQL Parserhttps://github.com/alibaba/druid/releases/tag/1.2.12
这个版本连接池默认增加配置connectTimeout和socketTimeout,增强了SQL Parser
- 连接池DruidDataSource支持新的配置connectTimeout和socketTimeout,分别都是10秒。这个默认值会减少因为网络丢包时导致的连接池无法创建链接。