Java SpringJDBCTemplate可以等待多长时间才能完成oracle存储过程

Java SpringJDBCTemplate可以等待多长时间才能完成oracle存储过程,java,spring,oracle,jdbctemplate,sqlexception,Java,Spring,Oracle,Jdbctemplate,Sqlexception,我的java代码如下: logger.info("start"); getJdbcTemplate().execute("call " + procedureName + "()"); 我得到了一个例外: org.springframework.dao.DataAccessResourceFailureException: StatementCallback; SQL [call PRMI_UPDATE_USER_LOGIN_INFO()]; Io ERROR: Connection re

我的java代码如下:

logger.info("start");
getJdbcTemplate().execute("call " + procedureName + "()");  
我得到了一个例外:

org.springframework.dao.DataAccessResourceFailureException: StatementCallback; SQL [call PRMI_UPDATE_USER_LOGIN_INFO()]; Io ERROR: Connection reset; nested exception is java.sql.SQLException: Io ERROR: Connection reset
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:257)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:407)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:428)
也许是因为等待的时间太长了。我发现它在日志中打印了“开始”,大约5分钟后,我得到了异常

2013年3月13日更新:

我不仅在调用oracle存储过程时,而且在druid的“jdbcuti.close(…)”中都遇到了这个异常:

德鲁伊的JdbcUtil.close方法非常简单:

 public static void close(Connection x) {
    if (x == null) {
        return;
    }
    try {
        x.close();
    } catch (Exception e) {
        LOG.debug("close connection error", e);
    }
}
源代码是:

也许是因为等待的时间太长了

不,这不是由于该原因造成的

正如Java文档所说

资源完全失败时引发的数据访问异常:对于 例如,如果我们不能使用JDBC连接到数据库


只要需要,它就应该等待。忘记那些试图基于超时延迟“检测”死锁的各种黑客吧

  • 您还应该发现一些ORA-XXXX错误<代码>Io错误:连接重置看起来不像Oracle错误消息,应该有一些错误号附加到它上
  • 超时5分钟是一个非常奇怪的值。理论上,这也可以在数据库端设置。作为配置文件参数
    CPU\u PER\u调用
    ,但在这种情况下,您应该会得到一个错误:
    ORA-02393:超出了CPU使用的调用限制
    。您的连接不应该丢失
  • 从理论上讲,您也可能在检测死区连接时遇到问题,但是5分钟的超时时间太短了
  • 另一个可能的原因可能是ORA-600错误。Oracle内部错误,可能您的会话进程崩溃,因此TCP连接丢失
  • 您应该联系您当地的DBA,然后请求合作。他们应该比互联网论坛上的匿名者更好地帮助你
感谢您的建议,但我们的DBA认为问题不在于数据库,然后只需从sqlplus(或SQLDeveloper)调用您的函数,您就会看到将发生什么。
 public static void close(Connection x) {
    if (x == null) {
        return;
    }
    try {
        x.close();
    } catch (Exception e) {
        LOG.debug("close connection error", e);
    }
}