Tomcat Jdbc 连接池活动连接
Tomcat Jdbc Connection Pool active connection
我们有一个 spring-boot 应用程序,它使用嵌入式 tomcat 进行部署和 default 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 adn/or testWhileIdle 等来获得这个工作但是...
我试图了解tomcat-jdbc 连接池中活动连接 的 生命周期。根据文档,MySQL 的 wait_timeout
的默认值是 8 小时 ,而 Tomcat_jdbc 的 idle_connection_timeout
的默认值几乎是6 秒。
- 如果到处都在使用默认值,那为什么以前从未出现过问题?
- 或者每次 cron 启动时 tomcat-jdbc 连接池中的连接都处于活动状态 运行宁然后变得闲置?
- spring-boot 应用程序或调度程序的状态有什么不同吗?
问题不在配置或设置中。 spring-boot
应用程序使用 spring-data
库,它利用了底层 connection pool
。池根据连接池实现处理连接。然而,@Transactional
的使用决定了何时打开基础连接。如果在 spring-boot
app 中指定了 none,则 spring-data
的默认实现会在 crud 操作期间打开它;否则它在用 @Transactional
.
注释的应用程序中的方法调用期间打开
在我的例子中是后者.. 打开连接后,非数据库进程花费了时间运行,这使得连接在打开后进入空闲状态,并在稍后实际使用它时抛出异常。
我们有一个 spring-boot 应用程序,它使用嵌入式 tomcat 进行部署和 default 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 adn/or testWhileIdle 等来获得这个工作但是...
我试图了解tomcat-jdbc 连接池中活动连接 的 生命周期。根据文档,MySQL 的 wait_timeout
的默认值是 8 小时 ,而 Tomcat_jdbc 的 idle_connection_timeout
的默认值几乎是6 秒。
- 如果到处都在使用默认值,那为什么以前从未出现过问题?
- 或者每次 cron 启动时 tomcat-jdbc 连接池中的连接都处于活动状态 运行宁然后变得闲置?
- spring-boot 应用程序或调度程序的状态有什么不同吗?
问题不在配置或设置中。 spring-boot
应用程序使用 spring-data
库,它利用了底层 connection pool
。池根据连接池实现处理连接。然而,@Transactional
的使用决定了何时打开基础连接。如果在 spring-boot
app 中指定了 none,则 spring-data
的默认实现会在 crud 操作期间打开它;否则它在用 @Transactional
.
在我的例子中是后者.. 打开连接后,非数据库进程花费了时间运行,这使得连接在打开后进入空闲状态,并在稍后实际使用它时抛出异常。