1


我正面临如此烦人的问题,
使用 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 当然没有帮助。)

提前致谢。

4

3 回答 3

2

a) 停止 MySQL 数据库服务器和应用程序服务器(Tomcat 或其他)。

b) Mysql 设置:这应该在 mysql 文件夹下的“my.ini”文件中完成。

wait_timeout =1200(即 20 分钟 - 与您的防火墙或任何其他第三方软件保持相同的时间)

您可以通过上述查询设置它的数据库级别。设置wait_timeout = 1200;

通过上述查询查看设置显示变量,如 'wait_timeout' ;

c) 在“Torque.properties”文件中添加两个属性。

minEvictableIdleTimeMillis 一个连接可以在池中保持空闲的时间(以毫秒为单位)

    torque.dsfactory.csa.pool.minEvictableIdleTimeMillis = 1100000

#timeBetweenEvictionRunsMillis 驱逐线程运行之间的时间(以毫秒为单位);必须大于 0;默认为 -1

  torque.dsfactory.csa.pool.timeBetweenEvictionRunsMillis = 2000


    d) Start application and db server
于 2013-06-13T07:20:20.153 回答
2

使用命令 /s 检查 MYSQL 的状态现在检查您在代码中提到的端口号,如果端口号不同,则应与 MYSQL 端口匹配,请更改它

(jdbc:mysql://localhost:3306/mrt) 在这个例子中我的端口号是 3306

于 2018-05-23T09:25:59.340 回答
1

您需要在资源的 server.xml 文件中设置 MaxIdle 和 Timeout 属性。

于 2012-10-25T06:18:46.690 回答