小编典典

Java + Tomcat,正在断开数据库连接?

mysql

我有一个tomcat实例设置,但是context.xml在一段时间不活动之后,我在其中配置的数据库连接不断消失。

当我检查日志时,出现以下错误:

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

这是context.xml中的配置:

<Resource name="dataSourceName" 
        auth="Container" 
        type="javax.sql.DataSource"
        maxActive="100" 
        maxIdle="30" 
        maxWait="10000" 
        username="username" 
        password="********"
        removeAbandoned = "true"
        logAbandoned = "true"
        driverClassName="com.mysql.jdbc.Driver" 
        url="jdbc:mysql://127.0.0.1:3306/databasename?autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8"  />

我正在autoReconnect=true按照错误说的那样使用,但是连接一直在消失。我以前从未见过这种情况。

我还验证了所有数据库连接均已正确关闭。


阅读 343

收藏
2020-05-17

共1个答案

小编典典

Tomcat文档

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

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

此属性可以帮助您。

removeAbandonedTimeout="60"

我正在使用相同的连接池内容,并且正在设置这些属性以防止未通过tomcat配置该内容。但是,如果第一件事不起作用,请尝试这些。

testWhileIdle=true
timeBetweenEvictionRunsMillis=300000
2020-05-17