【问题标题】:Keep database connection open or reopen it everytime it is needed?每次需要时保持数据库连接打开还是重新打开它?
【发布时间】:2015-03-14 18:59:20
【问题描述】:

我知道这种问题已经被问过几次了,我读了其中的一些,但并没有变得更聪明。 我的 Java 应用程序通过 SSH 隧道通过 JDBC 连接到数据库服务器。隧道一开始就打开一次。开始时,每次使用它时我都会打开数据库连接。由于应用程序的更改,我需要在启动时打开连接,并决定保持打开状态,直到我的应用程序关闭。当我关闭应用程序时,有时(并非总是)会出现以下错误:

 - Could not retrieve transation read-only status server

 java.sql.SQLException: Could not retrieve transation read-only status server
 Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

 The last packet successfully received from the server was 369.901 milliseconds ago.  The last packet sent successfully to the server was 8 milliseconds ago.
 Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

这可能是因为始终打​​开的数据库连接吗?我只在短时间内测试应用程序。它将整天在 4 台计算机上运行。我可以更频繁地期待这个错误吗?每隔几分钟就会使用一次连接,因此保持打开状态应该会更高效,但可能在中断期间有半小时不使用。

你会推荐我做什么?当我收到此错误时,是否始终重新打开连接或保持原样并找到解决方法?您可能对为什么会出现此错误有其他想法吗?

只需询问您是否需要更多错误日志、数据库代码或任何您需要的东西。

谢谢!

【问题讨论】:

  • 我确实会使用某种可用于管理连接的连接池。虽然您可以打开一次连接,但您确实会遇到同时运行多个查询的问题,这可能会混淆结果。
  • vpn 可能正在终止连接。许多 VPN 监视长时间运行的连接并终止它们。大多数连接池都可以选择限制在删除连接并创建新连接之前可以重用连接的次数。

标签: java database jdbc database-connection


【解决方案1】:

我会说是的,您的问题可能是由于您打开了持久连接。

我不久前接管了一个网站,而我之前的那个人也有同样的想法:打开一个连接,在需要时通过它发送查询,永远不要关闭它。在我接管网站一个月后,数据库不再像这样返回任何查询结果。

作为一般经验法则和良好的编程习惯,请务必自行清理。如果您不使用变量,请将其设置为 null 并删除它。不使用连接?终止它。这在 Java 中不如在 C++ 中那么突出,因为 Java 为您完成了大部分清理工作。

【讨论】:

    猜你喜欢
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多