【问题标题】:Java connectivity issueJava 连接问题
【发布时间】: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 小时,这样连接才不会在这么长的空闲时间后断开……

标签: java mysql


【解决方案1】:

你可以做几件事,

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多