【问题标题】:Spring app throwing java.sql.SQLRecoverableException: Closed ConnectionSpring应用程序抛出java.sql.SQLRecoverableException:关闭连接
【发布时间】:2015-06-17 15:36:27
【问题描述】:

按周计划长时间运行的独立 Spring 应用程序(不在任何应用程序服务器上)通常需要几天才能完成,但由于 java.net.SocketException: Broken pipe 而失败。

这是堆栈跟踪:

Caused by: java.sql.SQLRecoverableException: IO Error: Broken pipe
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:876)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:703)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644)
    ... 28 more

Caused by: java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at oracle.net.ns.DataPacket.send(DataPacket.java:199)
    at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:211)
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:227)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1122)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)

【问题讨论】:

    标签: spring


    【解决方案1】:

    java.net.SocketException: Broken pipe 异常表明,您正在编写,而另一端已经关闭了连接。因为另一端没有读它。正如我也说过的,如果发生这种情况,则说明您的应用程序协议规范或实现有问题,很可能您甚至没有。

    如果应用程序正在处理大量数据,请考虑 JVM 内存问题。另一种可能性是连接的另一端没有等待足够长的时间然后关闭连接,因为应用程序准备数据和发送的时间太长。并且连接超时。

    阅读this 文章以了解更多信息。

    【讨论】:

      猜你喜欢
      • 2013-01-23
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2013-12-15
      • 2015-11-17
      相关资源
      最近更新 更多