Tomcat Jdbc连接池活动连接

时间:2017-07-20 07:20:29

标签: mysql spring-boot cron tomcat-jdbc

我们有一个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秒

  1. 如果默认值在任何地方都在使用,那么为什么问题从未出现过?
  2. 或者,每当 cron 开始运行时,tomcat-jdbc连接池中的连接是否处于活动状态并在此后变为空闲状态?
  3. 是弹簧启动应用程序或调度程序的状态有何不同?

1 个答案:

答案 0 :(得分:0)

问题不在于配置或设置。 spring-boot app使用spring-data lib,它使用基础connection pool。池根据连接池实现处理连接。然而,使用@Transactional决定何时打开底层连接。如果spring-boot app中没有指定spring-data的默认实现,则会在crud操作期间打开它;否则,在使用@Transactional注释的应用程序中的方法调用期间打开它。

在我的情况下,它是后者..打开连接后,正在运行非DB进程的时间,这使得连接在打开后变为空闲,并且在稍后实际使用时抛出异常。