Java 服务器如何/何时知道连接已过时?

Java 服务器如何/何时知道连接已过时?,java,websphere,connection-pooling,Java,Websphere,Connection Pooling,根据IBM文档: 清除策略 指定在检测到陈旧连接或严重连接错误时如何清除连接。 有效值为EntirePool和FailingConnectionOnly 问题: 服务器如何/何时知道连接已过时?它是否会在(立即)任何连接失效或按照收割时间进行时立即清除池 假设收割时间为180秒。假设收割线程上次在下午3:05运行,连接在下午3:06失效,服务器是在下午3:06自己清除池,还是只在下午3:08清除池?在3:06和3:08之间,客户端是否存在获取过时连接对象的风险 我所指的IBM文档是: 通过以下方

根据IBM文档: 清除策略 指定在检测到陈旧连接或严重连接错误时如何清除连接。 有效值为EntirePool和FailingConnectionOnly

问题: 服务器如何/何时知道连接已过时?它是否会在(立即)任何连接失效或按照收割时间进行时立即清除池

假设收割时间为180秒。假设收割线程上次在下午3:05运行,连接在下午3:06失效,服务器是在下午3:06自己清除池,还是只在下午3:08清除池?在3:06和3:08之间,客户端是否存在获取过时连接对象的风险

我所指的IBM文档是:

通过以下方式识别陈旧的连接:

  • 执行JDBC操作时,会引发SQLRecoverableException或SQLNonTransientConnectionException,或者引发具有SQL状态或错误代码的常规SQLException,应用程序服务器内置了解这些SQL状态或错误代码。有关SQL状态和错误代码的特定列表,请参阅中的SQLState映射及其每个数据库的各个子类
  • JDBC驱动程序的ConnectionEventListener.connectionErrorOccursed向应用程序服务器发出连接已损坏的信号
  • 当应用服务器得知连接已损坏时,它不会将该连接返回到池中。共享范围之外的后续请求永远不会获得相同的连接

    清除策略确定应用程序服务器在发生陈旧连接时对池中的其他连接执行的操作。应用程序服务器可以主动清除池中的所有连接(EntirePool选项),也可以将其他连接留在池中(FailingConnectionOnly选项),或者在允许分发连接之前检查池中的所有连接(ValidateAllConnections选项)

    请注意,上面的属性值适用于WebSphere Application Server Liberty。如果使用传统方式,则ValidateAllConnections是FailingConConnectionOnly加上DefaultPreteStopTimeizationOverride=true的组合