遇到一个很奇怪的问题,项目的数据库连接池使用的是DBCP,隔一天再去访问的时候就会出现
Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 68,764,844 milliseconds ago. The last packet sent successfully to the server was 68,764,844 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
;这个异常,百度google均说是因为连接8小时失效,但连接池认为他仍然有效所以才报错。
我也修改了配置文件
testOnBorrow=true
testOnReturn=true
testWhileIdle=true
validationQuery=select 1 FROM testconnection
timeBetweenEvictionRunsMillis=300000
numTestsPerEvictionRun=36
minEvictableIdleTimeMillis=3600000
但是没有效果。。。而且出现这个错误时,只需要换个浏览器,或者多刷新几次这个错误就没了。。不知道是什么原因,求大神解救··
------解决方案--------------------
原因确实是像你说的那样,因为太久没人访问,链接超时,服务器把链接关了,但是连接池不知道,还在用这个失效的链接
------解决方案--------------------
按理说改成这样的配置应该没问题了啊,你确定测试的时候用的是这个配置
------解决方案--------------------
把mysql,服务器重启一下就行了
------解决方案--------------------
生产环境要遇到问题能这么解决吗?要找到根本原因!
------解决方案--------------------
确实如此!是你sql的服务器连接已经超时了,如果连接已经超时,那么你的连接池中连接都是无效的,然后你去调用的时候自然就报错了,然后你是不是在次连接的时候 就又可以使用了,就是每天都会报一次错误。
解决这个问题 只需要在my.ini配置中新增一个参数 wait_timeout=2147483 然后重启服务器就可以了