【发布时间】: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