我正面临着这样烦人的问题,
使用TomcatJDBC 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当然没有帮助。)
提前致谢。
答案 0 :(得分:2)
a)停止MySQL数据库服务器和应用程序服务器(Tomcat或其他)。
b)Mysql设置:这应该在mysql文件夹下的“my.ini”文件中完成。
wait_timeout = 1200(即20分钟 - 保持防火墙或任何其他第三方软件的同一时间)
您可以通过上述查询设置数据库级别。设置wait_timeout = 1200;
按上述查询查看设置显示“wait_timeout”;
等变量c)在“Torque.properties”文件中添加两个属性。
torque.dsfactory.csa.pool.minEvictableIdleTimeMillis = 1100000
#timeBetweenEvictionRunsMillis驱逐线程运行之间以毫秒为单位的时间;必须大于0;默认为-1
torque.dsfactory.csa.pool.timeBetweenEvictionRunsMillis = 2000
d) Start application and db server
答案 1 :(得分:1)
您需要在资源中的server.xml文件中设置MaxIdle和Timeout属性。
答案 2 :(得分:1)
使用命令/ s检查MYSQL的状态 现在检查您在代码中提到的端口号,该端口号应与MYSQL端口匹配 如果端口号不同则改变它
(JDBC:MySQL的://本地主机:3306 / MRT) 在这个例子中,我的端口号是3306