我们知道Mysql有两个关于连接超时的参数,默认为8小时:
MySQL > show global variables like '%timeout%';
wait_timeout = 28800
非交互连接等待时间
interactive_timeout = 28800
交互连接等待时间
MySQL > show processlist;
当connection空闲(Sleep)超过8小时,Mysql将自动断开该connection,而JDBC连接池并不知道该connection已经失效,如果这时有Client请求connection,JDBC将该失效的Connection提供给Client,将会造成异常。
一般会有5种处理方式:
1、MYSQL调大数据库超时参数:如果太大,可能导致连接数较多,引起性能下降
代码语言:javascript代码运行次数:0运行复制set global wait_timeout = 2073600;
set global interactive_timeout = 2073600;2、JDBC配置Mysql连接URL重连机制
代码语言:javascript代码运行次数:0运行复制jdbc:mysql://localhost:3306/test?user=root&password=&autoReconnect=true3、JDBC减少连接池内连接生存周期:使之小于所设置的wait_timeout 的值
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
由于老版本有些功能不兼容,导致连接报错,可以升级到最新版本后再观察
下载地址:https://dev.mysql.com/downloads/connector/j/
JDBC主要参数说明:
代码语言:javascript代码运行次数:0运行复制
其他参数:
更多参数解读:
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html