我们有一个 spring-boot 应用程序,它使用嵌入式 tomcat 进行部署,默认tomcat-jdbc 连接池与 MySQL 后端,没有针对 MySQL 或 Tomcat 端的自定义。
该应用程序有一些调度程序,主要在一天中的特定时间运行,即在昨天的最后一次 cron 运行和今天的第一次 cron 运行之间,有超过9 小时的间隔。但是,每当 cron 更早运行时,它从未遇到过空闲连接问题。
现在我们看到一条错误消息
The last packet successfully received from the server was XXXXXXXX milliseconds ago. The last packet sent successfully to the server was XXXXXXXY milliseconds ago.
,我总是可以尝试使用testOnBorrow和validateQuery和/或testWhileIdle等作为 reqd 来使其正常工作,但是......
我试图理解tomcat-jdbc 连接池中活动连接的生命周期。根据文档,wait_timeout
MySQL的默认值为8 hrs,而idle_connection_timeout
Tomcat_jdbc 的默认值为接近6 secs。
- 如果默认值到处都在使用,那么为什么以前从未出现过问题?
- 还是每次cron开始运行时tomcat-jdbc连接池中的连接都处于活动状态并且此后变得空闲?
- 是 spring-boot 应用程序的状态还是调度程序的状态有什么不同?