Java 如何解决MySQL jdbc套接字闭合SocketException?
每次我的日志文件中都会出现一个错误:Java 如何解决MySQL jdbc套接字闭合SocketException?,java,mysql,sql,sockets,jdbc,Java,Mysql,Sql,Sockets,Jdbc,每次我的日志文件中都会出现一个错误: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: Socket closed STACKTRACE: java.net.SocketException: Socket closed
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Socket closed
STACKTRACE:
java.net.SocketException: Socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1994)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2411)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3179)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1207)
at com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)
当应用程序在MySQL数据库中执行特定查询时,它总是发生在代码的同一点上
查询如下:
SELECT M.*, O.id
FROM order_message M
INNER JOIN orders O ON M.order_id = O.id
WHERE O.seller_id = 14224 AND M.sender_user_id <> 14224
ORDER BY M.creation_date DESC
LIMIT 5
选择M.*,O.id
从订单信息M
M.order\u id=O.id上的内部连接顺序O
其中O.seller\u id=14224和M.sender\u user\u id 14224
订单由M.creation\u日期描述
限制5
我注意到(通过解释这个查询),它总是使用临时/filesort来执行。所有索引都已正确创建,我认为这是无法改进的,但我怀疑是查询性能或资源利用率导致了异常错误
我使用的是amazon RDS。问题是,我的连接池的配置方式是,任何耗时超过10秒的数据库连接都会被连接池丢弃(c3p0)。我使用的是unreturnedConnectionTimeout参数 c3p0文档页面不鼓励使用此参数。理想情况下,所有连接都应正确关闭(从而返回到池)
我已将参数增加到60秒,问题得到解决。是否可以用c3p0从图片中重现此问题?请显示调用此查询的Java代码以及所有其他相关代码。