连接池在Tomcat 7中以静默方式过期,但autoReconnect = true无法修复它

Jas*_*ugh 5 java connection-pooling tomcat7 ubuntu-14.04 server

我已经获得这些例外数周而没有解决方案......

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功收到的最后一个数据包是179,695,604毫秒前.

成功发送到服务器的最后一个数据包是179,695,604毫秒之前.比服务器配置的'wait_timeout'值长.您应该考虑在应用程序中使用之前到期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用Connector/J连接属性'autoReconnect = true'来避免此问题

所以我已经改变了我的应用程序的Context.xml,以便autoReconnect=true在Tomcat 7中为我的数据库设置连接池的标签.我甚wait_timeout至在上下文文件中设置为无穷大.

我错过了什么?这是个常见的问题吗?它似乎在网上有少量信息,但是当我按照这些指南时,在一段时间不活动后的第二天也会发生同样的事情.

我使用服务器越多,发生的情况就越少.我认为它是池连接的到期,但如果wait_timeout失败,如何阻止它们到期?有关如何诊断问题或配置文件的任何想法?

Ale*_*lor 1

MySQL Connector/J 文档介绍了autoReconnect

如果启用,驱动程序将为在属于当前事务的陈旧或失效连接上发出的查询抛出异常,但会在新事务中的连接上发出下一个查询之前尝试重新连接。

这意味着您仍然会遇到例外情况。

JDBI等连接器通过在空闲时添加可选的测试查询、从池中借用并返回池来解决此问题。也许您可以向您自己的 JDBC 连接包装器中添加一些内容来执行相同的操作。或者,遵循文档autoReconnect并正确捕获因死连接/陈旧连接而产生的 SQLException。

使用 DBCP 和 c3p0关于这个答案有更多有用的参考