Java 连接问题

Posted

技术标签:

【中文标题】Java 连接问题【英文标题】:Java connectivity issue 【发布时间】:2011-10-20 14:09:26 【问题描述】:

我收到以下错误。

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

一旦我重新启动应用程序,它可以正常工作一段时间,然后出现同样的错误。

【问题讨论】:

我假设您的问题是“我该如何解决这个问题?”。您是否尝试过错误消息中的建议?你在使用池化吗?你检查过挂起的连接吗? 嗯,超时设置超过10小时。 “一段时间”有多长? @bdares,您在哪里看到“wait_timeout”设置为? @bdares 我猜默认的 wait_timeout 是 8 小时 - 28800 秒。并且自过去 10 小时以来一直处于非活动状态。 呃是的。我的意思是超时设置必须超过 10 小时,这样连接才不会在这么长的空闲时间后断开…… 【参考方案1】:

你可以做几件事,

    在一两天内将wait_timeout 配置为一个非常长的值。见here 在您的 MySQL 连接 URL jdbc:mysql://yourhost:port/dbname?autoReconnect=true 中添加 autoReconnect=true

【讨论】:

【参考方案2】:

您的连接即将到期,因为您正在创建它们并“永久”保留它们。

最好的办法是使用连接池,比如Apache's DBCP - DataBase Connection Pool。

池为您提供的一件事是,它会在将连接提供给您之前检查连接的有效性 - 如果连接“不好”(它运行一个简单的查询来断言),它会关闭它并创建一个新的然后给你新的。这巧妙地迎合了到期。

【讨论】:

以上是关于Java 连接问题的主要内容,如果未能解决你的问题,请参考以下文章

java和数据库连接问题

java sql数据连接池的问题?

我的java和oracle连接出了问题,帮忙看一下。代码是:

java.net.ConnectException:连接被拒绝:连接 HTTPS 连接

如何查询数据库连接不释放,和java程序一直进行链接,这种问题怎么处理

java jdbc 连接数据问题