当前位置: 首页 > 知识库问答 >
问题:

Tomcat Jdbc连接池活动连接

叶允晨
2023-03-14

我们有一个spring-boot应用程序,它使用嵌入式tomcat进行部署,并使用MySQL后端的默认tomcat-jdbc连接池,而没有为MySQL或tomcat端定制。
该应用程序有一些调度程序,它们主要在一天中的特定时间运行,即在昨天的最后一次cron运行和今天的第一次cron运行之间,有超过9个小时的间隙。然而,无论何时cron在早期运行,它都从未遇到过空闲连接问题。

现在我们看到一条错误消息
从服务器成功接收的最后一个数据包是在XXXXXXXX毫秒前。最后一个成功发送到服务器的数据包是xxxxxxy毫秒前。

我总是可以尝试使用TestonBrown with validateQuery、ADN/或testWhileIdle等作为reqd来使其工作,但是...

我试图理解tomcat-jdbc连接池中活动连接的生命周期。对于文档来说,MySQL的wait_timeout的默认值是8小时,而Tomcat_jdbc的idle_connection_timeout的默认值是近6秒。

  1. 如果默认值到处都在使用,那么为什么以前从来没有出现过问题?
  2. 还是每次cron开始运行时,tomcat-jdbc连接池中的连接都处于活动状态,然后变为空闲状态?
  3. 是spring-boot应用程序的状态还是调度程序的状态有什么不同?

共有1个答案

薛烈
2023-03-14

问题不在配置或设置中。spring-bootapp使用spring-datalib,该lib使用底层的连接池。池根据连接池实现处理连接。但是,@transactional的使用决定了基础连接何时打开。如果在spring-bootapp中没有指定,则spring-data的默认实现将在crud操作期间打开它;否则,它将在使用@transactional注释的应用程序中的方法调用期间打开。

在我的情况下是后者..打开连接后,一个耗时的非DB进程正在运行,该进程使连接在打开后处于空闲状态,并在以后实际使用时引发异常。

 类似资料:
  • 我正在使用DBCP连接池,并创建了一个MBean来在Jconsole中显示连接池的统计信息。我观察到的是,即使应用程序上没有活动(意味着没有页面点击等),连接池统计数据也会显示活动连接。 我们在上面看到的16个虚拟连接并没有降到零。我不知道为什么?有人能解释一下吗? 谢谢

  • 此刻我被困住的一点是调试处于“活动”状态的连接,以及它们正在做什么或它们当前被困的原因。 当我运行“10个同时用户”时,它基本上可以转换成2或3倍于此的查询,因此,当我打开HikariCP调试日志时,它会挂在类似的位置-上,而“active”连接并没有真正释放连接,这正是我试图找出的原因,因为查询相当简单,表本身只有4个字段(包括主键)。 HikariCP人员的最佳实践通常也是,增加连接池不是实现

  • 我正在使用配置了多个数据源的Spring Boot 1.5.17。我的一个数据源配置如下。 现在,如何获取或记录此数据源的连接池中的活动连接数?

  • > 可能是我有这个确切的问题https://github.com/brettwooldridge/hikaricp/issues/109在我的例子中,活动连接随着每个事务的增加而增加。 HikariCP-连接不可用这也是一个相同的问题。但没有人对此提供明确的解决方案。顺便说一句,我使用了begging中的。

  • Flask-SocketIO同样支持连接和断开的活动。接下来的例子将会展示怎样为他们注册一个处理函数: @socketio.on('connect', namespace='/chat') def test_connect(): emit('my response', {'data': 'Connected'}) @socketio.on('disconnected', namespace

  • 我对连接池有一些疑问。在SQL Server连接池文章中提到的内容类似于“打开新连接时,如果连接字符串与现有池不完全匹配,则会创建一个新池。每个进程、每个应用程序域、每个连接字符串以及使用集成安全性时、每个Windows标识将连接池化。” 现在我有了自己的windows窗体应用程序,它具有SQL连接。 > 所以当我打开应用程序时,SQL连接首次打开,并创建了一个池。所以,如果我关闭应用程序池会被自