【发布时间】:2011-10-02 07:56:43
【问题描述】:
我在 Tomcat 下有一个 Java 应用程序,连接到 Postgre 和 MySQL 数据库。 每次我从 Java 访问数据库时(一段时间后),它总是失败。我检查了 Tomcat 的日志,发现:
最后一个成功发送到服务器的数据包是在 85,313,128 毫秒前。是
长于服务器配置的“wait_timeout”值。你应该考虑 在您的应用程序中使用之前过期和/或测试连接有效性,增加 服务器为客户端超时配置值,或使用连接器/J 连接 属性 'autoReconnect=true' 来避免这个问题。
我已经检查了this question 但并不真正了解解决方案(或者它是否适用于我的情况)或为什么会发生这种情况。
我想问题是 Postgre/MySQL 数据库空闲时间太长了,但是当我使用 Java 访问数据库时,我打开了一个连接,完成后总是关闭它,所以我不明白为什么连接应该保持打开状态这么久。
有人有什么想法吗?
更新:
我没有使用 C3PO...我连接:
Datasource d = context.lookup("....");
Connection c = d.getConnection();
然后断开连接:
c.close();
MySQL 的上下文如下所示:
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="200" maxIdle="15" maxWait="-1" name="jdbc/project" password="...." type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/project" username="..."/>
<ResourceLink global="jdbc/project" name="jdbc/project" type="javax.sql.DataSource"/>
【问题讨论】:
-
你是如何连接的?你自己管理连接还是有一个连接池来处理它?如果是后者,如果您自己掌握连接管理会发生什么?
-
您是否调查过错误消息中的 autoReconnect=true 提示?你使用任何像 C3P0 这样的 sql 池吗?
-
@cdegroot @ZeroPage 请看我的更新