java.sql.SQLException:Ioexception:破坏管道如何在不重启的情况下恢复?

在我的应用程序中,我使用连接到Oracle,当连接丢失并且我尝试重新连接时收到exception:

java.sql.SQLException: Io exception: Broken pipe at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273) at oracle.jdbc.driver.T4CStatement.fetch(T4CStatement.java:540) at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:264) at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:196) 

对于恢复我需要重启应用程序,是否可以在不重启的情况下恢复? 谢谢。

以下可能是导致例外的可能性:

  1. 网络问题:这是数据库和应用程序服务器之间的网络,导致物理连接在一段时间后被丢弃。 这可能是由于网络后面运行的防火墙配置为在指定的时间段后终止数据库连接。 您可以考虑一种解决方法,只需重新配置应用程序服务器,即可始终保持连接的活动状态。 对于Tomcat,您可以尝试在Tomcat数据源配置文件(context.xml)中添加validationQuery="select 'validationQuery' from dua l的validationQuery="select 'validationQuery' from dua

  2. 正在重置与数据库服务器的连接,并且数据库驱动程序不通知客户端。 在这种情况下的问题是Oracle驱动程序发现它是以某种方式向DBMS的套接字(防火墙,可能?)已被另一端关闭。 您可以考虑将连接超时(在池中)设置为比网络/数据库服务器超时短的解决方案。