Java + Tomcat,Dying数据库连接?

我有一个tomcat实例设置,但我在context.xml中配置的数据库连接在不活动时间后仍然会死亡。

当我检查日志时,我收到以下错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功收到的最后一个数据包是68051秒前。 成功发送到服务器的最后一个数据包是68051秒前,这比服务器配置的’wait_timeout’值长。 您应该考虑在应用程序中使用之前到期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用Connector / J连接属性“autoReconnect = true”来避免此问题。

这是context.xml中的配置:

 

我正在使用autoReconnect = ture,就像错误所说的那样,但连接一直在死。 我以前从未见过这种情况。

我还validation了所有数据库连接都已正确关闭。

Tomcat文档

DBCP使用Jakarta-Commons数据库连接池。 它依赖于Jakarta-Commons组件的数量:

 * Jakarta-Commons DBCP * Jakarta-Commons Collections * Jakarta-Commons Pool 

此属性可能会帮助您。

 removeAbandonedTimeout="60" 

我正在使用相同的连接池,我正在设置这些属性以防止同样的事情,它只是没有通过tomcat配置。 但如果第一件事不起作用,试试这些。

 testWhileIdle=true timeBetweenEvictionRunsMillis=300000 

只是为了澄清实际导致这种情况的原因。 默认情况下,MySQL会在8小时不活动后终止打开的连接。 但是,数据库连接池将保留连接的时间超过此时间。

因此,通过设置timeBetweenEvictionRunsMillis = 300000,您将指示连接池运行连接并每隔5分钟逐出并关闭空闲连接池。

从DBCP 1.2开始,不推荐使用removeAbandoned选项(尽管仍然存在于1.3分支中)。 这是一个非官方的解释。

我不知道上面的答案是否基本相同,但我们的一些系统每周大约使用一次数据库连接,我看到我们提供了一个-Otimeout标志或类似的东西到mysql来设置连接时间到。