我正在使用JDBC连接到MySQL服务器(我认为没有连接池)。在连接网址中,我有autoReconnect=true
autoReconnect=true
但是我的连接仍然超时。我什至检查了conn.isClosed()它的错误。但是,当我尝试使用连接时,出现以下异常。
conn.isClosed()
com.mysql.jdbc.CommunicationsException:由于基础异常导致通信链接失败: **开始嵌套例外** java.net.SocketException 消息:软件导致连接中止:套接字写入错误 堆栈跟踪: java.net.SocketException:软件导致连接中止:套接字写入错误 ...
我知道在Java 1.6中可以使用它conn.isValid(0)来检查连接,但是我正在使用Java 1.5
conn.isValid(0)
有没有办法确保它不会超时?还是我必须升级到Java 1.6?
我有同样的问题,这绝对令人发疯。这是文档在MySQL网站上的内容(重点是我的)
驾驶员是否应该尝试重新建立陈旧和/或无效连接? 如果启用,驱动程序将为在旧连接或无效连接上发出的查询抛出异常,该查询属于当前事务,但将尝试在新事务中对连接发出的下一个查询之前重新连接 。不建议使用此功能,因为当应用程序无法正确处理SQLExceptions时,它具有与会话状态和数据一致性相关的副作用,并且仅当无法配置应用程序处理死机导致的SQLExceptions时才使用此功能。和陈旧的连接正确。或者,研究将MySQL服务器变量“ wait_timeout”设置为较高的值,而不是将默认值设置为8小时。
以我的经验,“下一个查询重新连接”功能似乎也不起作用,但是我使用的是MySQL 4.0,这可能就是这样做的原因。
我最终编写了一个微型框架,该框架捕获异常,检查该特定错误,并尝试重新连接并在可能的情况下重试该查询。
ETA :此链接提供了更多信息,并表示将来无论如何都可能会删除autoReconnect。