使用场景:
1.tomcat jdbc连接池
2.mysql数据库
3.隔一段时间后就会出现
Communications link failureThe last packet successfully received from the server was 2,687,887 milliseconds ago之类的错误提示,出现这个问题的原因是使用了无效数据库连接
代码语言:javascript复制spring.datasource.mysql.max-idle=10
spring.datasource.mysql.max-wait=10000
spring.datasource.mysql.min-idle=5
spring.datasource.mysql.initial-size=5
下面是mysql服务器配置
重点看wait_timeout这个参数跟2,687,887 这个打印信息,出现这个报错信息的原因在于操作mysql数据库时使用了一个无效连接,这个连接为什么无效呢?原因就在于2,687,887 这个时间是该连接上次操作mysql数据库的时间,由于这个时间超过2592000这个时间,mysql服务端会自动关闭这个连接,但是连接池没有把这个连接废除导致!
解决方法:
数据库连接增加下面配置
代码语言:javascript复制spring.datasource.mysql.validation-query=SELECT 1
spring.datasource.mysql.test-on-borrow=false
spring.datasource.mysql.test-while-idle=true
spring.datasource.mysql.time-between-eviction-runs-millis=30000
time-between-eviction-runs-millis这个参数一定要小于wait_timeout这个值,否则还有可能报上面的错!
test-on-borrow这个则可以完全避免上面的问题,但是效率没有使用test-while-idle高!
PS:
wait_timeout是针对jdbc客户端的超时设置,而interactive_timeout则是针对打开的mysql客户端,比如cmd等,但不包括navicat,navicat丢失连接后会自动重连的!!!