Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于底层异常,MySQL通信链路失败_Java_Mysql_Tomcat_Jdbc_Eofexception - Fatal编程技术网

Java 由于底层异常,MySQL通信链路失败

Java 由于底层异常,MySQL通信链路失败,java,mysql,tomcat,jdbc,eofexception,Java,Mysql,Tomcat,Jdbc,Eofexception,我正面临着如此恼人的问题, 使用TomcatJDBC库在Tomcat6和MySQL上运行。 com.mysql.jdbc.CommunicationsException: 由于基础异常导致通信链路故障: ** BEGIN NESTED EXCEPTION ** java.io.EOFException STACKTRACE: java.io.EOFException at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1934)


我正面临着如此恼人的问题,
使用TomcatJDBC库在Tomcat6和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小时分钟)后,所有与数据库的连接似乎都将过期。

autoReconnect=true" 
validationQuery="Select 1"
一切都安排好了。
我确实处理了和数据库的重新连接,它工作得很好,但巨大的日志文件是不好的,我也不能处理这个异常使它保持沉默。而且,这种类型的“修复”不是正确的解决方案。有没有办法:
a) 以静默方式处理此异常
b) 修复此问题(据我所知,我没有任何防火墙)(无法访问my.cnf进行mysql配置)

Tomcat 5上的Apache jConnector在完全不同的应用程序上也存在此问题,没有任何防火墙可以断开连接。

(在调用连接的方法上捕获EOFEException或CommunicationsException当然没有帮助。)


提前感谢。

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

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

a)停止MySQL db服务器和应用程序服务器(Tomcat或其他)

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

等待\u超时=1200(即20分钟–与防火墙或任何其他第三方软件保持相同的时间)

您可以通过以上查询设置它的DB级别。设置等待超时=1200

通过上述查询查看设置显示变量,如“等待超时”

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

minevictableidletimillis连接在池中保持空闲的时间(毫秒) #timeBetweenEvictionRunsMillis是退出线程运行之间的时间(毫秒);必须大于0;默认为-1

  torque.dsfactory.csa.pool.timeBetweenEvictionRunsMillis = 2000


    d) Start application and db server
a) 停止MySQL数据库服务器和应用程序服务器(Tomcat或其他)

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

等待\u超时=1200(即20分钟–与防火墙或任何其他第三方软件保持相同的时间)

您可以通过以上查询设置它的DB级别。设置等待超时=1200

通过上述查询查看设置显示变量,如“等待超时”

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

minevictableidletimillis连接在池中保持空闲的时间(毫秒) #timeBetweenEvictionRunsMillis是退出线程运行之间的时间(毫秒);必须大于0;默认为-1

  torque.dsfactory.csa.pool.timeBetweenEvictionRunsMillis = 2000


    d) Start application and db server

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

(jdbc:mysql://localhost:3306/mrt)
在本例中,我的端口号是3306,请使用/s命令检查MYSQL的状态 现在检查代码中提到的端口号,它应该与MYSQL端口匹配 如果端口号不同,请更改它

(jdbc:mysql://localhost:3306/mrt)
在本例中,我的端口号是3306,您的JDBC URL是什么?我假设
autoReconnect=true
是URL的一部分?您在哪里定义验证查询mysql://adress/dbName?autoReconnect=true“validationQuery=“Select 1”context.xml中定义的@BShip中的
validationQuery
在哪里?URL所在的行对不起,我不知道Tomcat的配置。我看这没什么问题。在我看来,你做的是对的。祝你好运。你的JDBCURL是什么?我假设
autoReconnect=true
是URL的一部分?您在哪里定义验证查询mysql://adress/dbName?autoReconnect=true“validationQuery=“Select 1”context.xml中定义的@BShip中的
validationQuery
在哪里?URL所在的行对不起,我不知道Tomcat的配置。我看这没什么问题。在我看来,你做的是对的。祝你好运。