【发布时间】:2011-10-26 00:04:07
【问题描述】:
我正面临如此烦人的问题,
使用 Tomcat JDBC Lib 在 Tomcat 6 和 MySQL 上运行。
com.mysql.jdbc.CommunicationsException:
由于底层异常导致通信链接失败:
** BEGIN NESTED EXCEPTION **
java.io.EOFException
STACKTRACE:
java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1934)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2380)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3026)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1137)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1231)
经过一段时间(20 分钟)后,到 db 的所有连接似乎都过期了。
autoReconnect=true"
validationQuery="Select 1"
一切都准备好了。
我确实处理重新连接到数据库,它工作正常,但是巨大的日志文件很糟糕,我不能处理这个异常以使其保持沉默。这种类型的“修复”也不是正确的解决方案。有什么办法:
a) 静默处理此异常
b) 修复此问题(我没有任何我知道的防火墙)(无权访问 my.cnf 进行 mysql 配置)
在完全不同的应用程序上使用 Apache jConnector 在 Tomcat 5 上也存在此问题,没有任何可能断开连接的防火墙。
(在调用连接的方法上捕获 EOFException 或 CommunicationsException 不会当然有帮助。)
提前致谢。
【问题讨论】:
-
你的 JDBC URL 是什么?我假设
autoReconnect=true是 URL 的一部分?你在哪里定义validationQuery? -
url="jdbc:mysql://adress/dbName?autoReconnect=true" validationQuery="Select 1"
-
@BShip 定义的
validationQuery在哪里? -
在 context.xml 的同一行 wheres url
-
对不起,我对 Tomcat 的配置一无所知。我看不出这有什么问题。在我看来,你在做正确的事。祝你好运。
标签: java mysql tomcat jdbc eofexception