为什么autoReconnect = true似乎不起作用?
我正在使用JDBC连接到MySQL服务器(我认为没有连接池)。 在连接URL中,我有autoReconnect=true
但我的联系仍然超时。 我甚至检查了conn.isClosed()
和它的错误。 但是当我尝试使用连接时,我得到以下exception。
com.mysql.jdbc.CommunicationsException:通信链路因基础exception而失败: **开始exception** java.net.SocketExceptionexception 消息:软件导致连接中止:套接字写入错误 堆栈跟踪: java.net.SocketException:软件导致连接中止:套接字写入错误 ...
我知道在Java 1.6中可以使用conn.isValid(0)
来检查连接,但是我使用的是Java 1.5
有没有办法确保它不超时? 或者我将不得不升级到Java 1.6?
我有同样的问题,这是非常令人发狂。 这是什么文档在MySQL网站上说(重点是我的)
司机是否应该尝试重新build立陈旧和/或死亡的连接? 如果启用,则驱动程序将针对属于当前事务的陈旧或死链接发出的查询抛出exception,但会在新事务中的连接上发出的下一个查询之前尝试重新连接 。 不build议使用此function,因为它在应用程序不能正确处理SQLExceptions时会产生与会话状态和数据一致性相关的副作用,并且仅在您无法configuration应用程序以处理因死亡而导致的SQLException时才使用并适当地陈旧的连接。 或者,研究将MySQL服务器variables“wait_timeout”设置为一个较高的值,而不是默认的8小时。
根据我的经验,似乎并没有“重新连接下一个查询”function,但是我使用的是MySQL 4.0,这可能是原因之一。
我最终编写了一个迷你框架,捕获exception,检查特定的错误,并尝试重新连接并在可能的情况下重试该查询。
ETA : 这个链接提供了更多的信息,并指出autoReconnect将来可能会被删除。
autoReconnect仍然抛出exception,所以你可以select做一些关于这种情况,如果你喜欢。 如果你抓住它,你会发现之后的连接再次出现。 (如果你在一个交易中有一些更复杂的 – 你目前的交易几乎已经死了。)