【问题标题】:What happens to MySQL connection when internet connection is lost?当 Internet 连接丢失时,MySQL 连接会发生什么?
【发布时间】:2014-03-11 08:46:56
【问题描述】:

我的应用程序服务器连接到 MySQL 数据库。此连接 24/7 开放。

假设我的互联网崩溃了,或者我阻止了 3306 端口。

JDBC 会抛出错误吗?如果没有,我应该如何处理这种问题?

我问这个的原因是因为我之前遇到过 MySQL 连接随机停止工作但没有关闭的情况,这导致客户端超时。

【问题讨论】:

  • 你可以拔掉插头看看会发生什么... :-)
  • 最简单的找出方法:建立连接并拉出电缆。您已经发现的最坏情况是您的连接超时。数据库系统将中止事务,并且 - 如果它站在它一边 - 可能会回滚。
  • 一个常见的问题是网络设备默默地丢弃 tcp/IP 连接。这就是为什么 JDBC 池具有检测陈旧连接的机制的原因。你的应用服务器应该有这个。

标签: java mysql jdbc connection


【解决方案1】:

您将获得MySQLNonTransientConnectionExceptionCommunicationsException。通常,为了程序安全,您可以:

  • 根据需要打开/关闭连接

  • 连接关闭时重新打开

我个人推荐前者,特别是当数据库是用户指定的(一些mysql设置有连接超时)。

编辑

根据@ThorbjørnRavnAndersen,我似乎确实忘记提及连接池,但这也是一个可行的解决方案。我个人不这样做,每个线程操作使用一个可实例化的 SQL 连接。

【讨论】:

    【解决方案2】:

    就我个人而言,我将所有数据库调用都放入 try/catch 块中,因为总是有可能出现问题。您需要在 catch 块中设置一些默认值,如果由于某种原因碰巧落在这些默认值上,则向最终用户显示某种(理想情况下是漂亮的)错误消息。

    运行 SQL 查询并不总是能保证拉回任何类型的结果...任何数量的事情都可能出错 - 服务器可能已关闭,连接可能已经饱和以至于无法拉回结果及时,它也可能处于各种备份的死角......这些事情必须始终考虑,这就是为什么我建议按照上述方式进行操作。

    最后,回答您的问题,是的,在任何这些情况下,JDBC 实际上都会抛出错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      • 2020-09-21
      相关资源
      最近更新 更多