我们有一个spring-boot应用程序,它使用嵌入式tomcat进行部署,默认 tomcat-jdbc连接池与MySQL后端没有自定义MySQL或Tomcat端。
该应用程序有一些调度程序,主要在一天中的特定时间运行,即在昨天的最后一次运行和今天的第一次运行之间,有超过 9小时的差距。但是,每当cron运行得更早时,它就永远不会遇到空闲连接问题。
现在我们看到一条错误信息
.htaccess
我总是可以尝试将 testOnBorrow 与 validateQuery adn /或 testWhileIdle 等作为reqd,以使其正常工作,但是......
/>
我试图了解tomcat-jdbc连接池中的活动连接的生命周期。根据文档,MySQL The last packet successfully received from the server was XXXXXXXX milliseconds ago. The last packet sent successfully to the server was XXXXXXXY milliseconds ago.
的默认值是 8小时,而Tomcat_jdbc上wait_timeout
的默认值几乎 6秒。
答案 0 :(得分:0)
问题不在于配置或设置。 spring-boot
app使用spring-data
lib,它使用基础connection pool
。池根据连接池实现处理连接。然而,使用@Transactional
决定何时打开底层连接。如果spring-boot
app中没有指定spring-data
的默认实现,则会在crud操作期间打开它;否则,在使用@Transactional
注释的应用程序中的方法调用期间打开它。
在我的情况下,它是后者..打开连接后,正在运行非DB进程的时间,这使得连接在打开后变为空闲,并且在稍后实际使用时抛出异常。