使用Oracle UCP时,连接将关闭



使用Oracle UCP 12.1.0.2.0版本时,我收到随机的"连接已关闭:连接已关闭"错误。看起来连接已标记为封闭oracle.ucp.jdbc.proxy.JDBConnectionProxyFactory#调用:

if(Clock.isBefore(this.creationTS, this.m_jdbcPooledConnection.getAvailableStartTime()) || Clock.isBefore(this.creationTS, this.m_jdbcPooledConnection.getBorrowedStartTime())) {
      this.m_closed = Boolean.valueOf(true);
}

Clock.isBefore(this.creationTS,this.m_jdbcPooledConnection.getAvailableStartTime())返回true。

有人能解释一下这张支票的用途吗?

getAvailableStartTime在连接返回到池时设置,creationTS-在创建JDBCConnectionProxyFactory时设置,在放弃连接时创建。

isBefore看起来是这样的:

public static boolean isBefore(long time1, long time2) {
        return time1 < time2 - 1000L;
}

那么,不到一秒钟前返回连接的情况是这样的吗?

ps:已尝试验证查询"select 1 from dual"-无效果

如果Clock.isBefore(this.creationTS, this.m_jdbcPooledConnection.getAvailableStartTime())返回true,则表示UCP已重新调用连接并使其再次可用。如果在UCP中打开连接获取,通常会发生这种情况。UCP检测何时借用了连接但使用时间过长(应用程序设计不当),为了避免连接泄漏,它将收回连接并使其在池中可用。如果原始线程随后唤醒并尝试使用连接,则会出现connection is closed错误。

相关内容

  • 没有找到相关文章