先附上完整报错,com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet successfully received from the server was 10,004 milliseconds ago. The last packet sent successfully to the server was 10,004 milliseconds ago.
首先在网上搜索,有以下解决方案:
1、在数据库url上加,autoReconnect=true
并不能解决问题
2、怀疑是数据库关闭了空闲时间超过28800秒(8小时)的连接,但上述报错显示10秒前还能成功,故排除这种可能。
而且druid连接池在1.2.6版本以后针对空闲连接有默认探活和剔除机制,会将空闲超过25600秒(7小时)的连接踢出,并默认60s进行一次探活。
3、后来就怀疑存在慢查询,从而导致以上错误,待验证
另外:发现只要在网上搜索以上问题都会让修改数据库的超时时间和连接池的超时时间,其实这种表述是不准确的,对于数据库来说是空闲连接超时时间,对于连接池来说,有很多个超时时间,需要去查找每个的定义。而且,连接池的默认参数配置刚好能避免因为空闲连接超时导致数据库关闭了连接但连接池还不知道的情况。当然手动修改数据库wait_timeout的情况除外。