繁体   English   中英

为什么 autoReconnect=true 似乎不起作用?

[英]Why does autoReconnect=true not seem to work?

我正在使用 JDBC 连接到 MySQL 服务器(我认为没有连接池)。 在连接 URL 我有autoReconnect=true

但我的连接仍然超时。 我什至检查conn.isClosed()及其错误。 但是当我尝试使用连接时,出现以下异常。

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error
...

我知道在 Java 1.6 中您可以使用conn.isValid(0)来检查连接,但我使用的是 Java 1.5

有没有办法确保它不会超时? 还是我必须升级到 Java 1.6?

我有同样的问题,这绝对令人抓狂。 这是 MySQL 网站上的文档所说的(重点是我的)

驱动程序是否应该尝试重新建立陈旧和/或死连接? 如果启用,驱动程序将为在陈旧或死连接上发出的查询抛出异常,这些查询属于当前事务,但会在新事务中的连接上发出下一个查询之前尝试重新连接 不建议使用此功能,因为它具有与 session state 相关的副作用以及应用程序无法正确处理 SQLExceptions 时的数据一致性,并且仅设计用于当您无法配置应用程序以处理因 dead 导致的 SQLExceptions 时并正确地过时的连接。 或者,研究将 MySQL 服务器变量“wait_timeout”设置为某个较高的值,而不是默认值 8 小时。

根据我的经验,“在下一个查询时重新连接”功能似乎也不起作用,但我使用的是 MySQL 4.0,这可能就是原因。

我最终编写了一个微型框架来捕获异常,检查特定错误,并在可能的情况下尝试重新连接并重试查询。

ETA此链接提供了更多信息,并表明将来可能会删除自动重新连接。

autoReconnect 仍然会引发异常,因此您可以根据需要选择对这种情况做些什么。 如果你抓住它,你应该会发现连接再次在那里。 (如果你在一个事务中,会有更多的复杂性——你当前的事务几乎已经死了。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM