首先看源码:
大概意思就是上次sql执行完距离现在间隔大于了60秒
明明配置也配了
为什么呢?
带着疑问看 1476行
跟进去看这个方法 ,这方法的实现在 MySqlValidConnectionChecker这个类,直接上代码:
92行到117在pin数据库;117到137在执行设定的sql语句。为什么usePingMethod是true呢?
看构造方法:
基本上usePingMethod默认就是true,第66行到75行在检测Properties里是否设置了druid.mysql.usePingMethod;Properties怎么来的呢,看66行,System.getProperties();
有没有set方法呢,那肯定是有的
最终我在服务器启动时加了一句:
解决问题。
回头看看第一张图的1484行:
主要是看438行,这里反射调用ConnectionImpl的:
再看881行,点进去:
long idleTime = now - this.lastQueryFinishedTime 真相了。