问题描述:
使用druid+mysql+mybatis,发现数据库超过8小时不使用,再次使用时报错。这个问题困扰我很久了。
规避型的方法到时有很多,包括:
1、将mysql连接的超时时间由默认的8小时改为24小时(我的后台查询中有一个查询会每24小时执行一次,所以可以解决连接失效的问题);
2、自己的业务代码中加入重试机制。也就是说在首次执行数据操作库失败后,会重试3次。只有3次都失败才退出。(这个方法个人觉得是可取的)。
但是连接失效的根本原因还是一致困扰这我。今天有时间和老大一起跟了下代码,终于柳暗花明~~~~~
问题原因:
Druid+Mysql默认使用的是ping的方式去判断连接是否有效。我们给druid配置的validationQuery根本就不会执行。
调试源码,发现usePingMethod变量为true
那么问题来了,如何将usePingMethod变为false呢?
解决方法:
在进程的启动参数中(jvm参数)设置-Ddruid.mysql.usePingMethod=false即可。
希望给后面遇到类似问题的人一点参考