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和oracle连接出了问题,帮忙看一下。代码是:
java.net.ConnectException:连接被拒绝:连接 HTTPS 连接