2008-08-19 62 views
13

我有一个tomcat实例设置,但我在context.xml中配置的数据库连接在不活动期间一直保持不变。Java + Tomcat,临时数据库连接?

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

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 从服务器成功接收was68051秒 前的最后一个包。成功发送到服务器的最后一个数据包在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的=自命像错误说做,但连接不断死亡。我从来没有见过这种情况发生过。

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

回答

8

Tomcat Documentation

DBCP使用Jakarta-共享数据库连接池。它依赖于雅加达共同组件的数量:

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

此属性可能会帮助你。

removeAbandonedTimeout="60" 

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

testWhileIdle=true 
timeBetweenEvictionRunsMillis=300000 
+0

不错。我在context.xml中设置了参数,并且我会让它静置24小时。如果它不起作用,我将不接受答案。但它看起来很有前途!谢谢! – 2008-08-19 14:25:13

0

我不知道上面的回答是否确实基本上是相同的事情,但我们的一些系统使用大约一个星期一次数据库连接,我已经看到了,我们提供了一个-Otimeout标志或某事排序到MySQL设置连接超时。

5

只是为了澄清究竟是什么造成了这种情况。默认情况下,MySQL在闲置8小时后终止打开的连接。但是,数据库连接池将保留更长的连接时间。

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

+0

此属性的名称是什么?我想仔细检查一下。我看到“thread_pool_idle_timeout = 60”。 – mass 2015-03-18 01:32:30

1

removeAbandoned选项从DBCP 1.2(尽管在1.3分支中为still present)开始已弃用。 Here是一个非官方的解释。