java - 服务器如何/何时知道连接已失效?

标签 java websphere connection-pooling

根据 IBM 文档: 清除政策 指定在检测到失效连接或致命连接错误时如何清除连接。 有效值为 EntirePool 和 FailingConnectionOnly。

问题: 服务器如何/何时知道连接已失效?一旦(立即?)任何连接失效或按照收获时间发生,它是否会立即清除池?

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

我指的IBM文档是: https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzamy/50/admin/help/udat_conpoolset.html

最佳答案

过时的连接可通过以下方式识别:

  1. 执行 JDBC 操作时会引发 SQLRecoverableException 或 SQLNonTransientConnectionException,或者引发应用程序服务器内置了解的 SQL 状态或错误代码的一般 SQLException。有关 SQL 状态和错误代码的具体列表,请参阅 DatabaseHelper 中的 SQLState 映射。及其每个数据库的各种子类。
  2. JDBC 驱动程序的 ConnectionEventListener.connectionErrorOccurred 向应用程序服务器发出连接已损坏的信号。

当应用程序服务器得知连接已损坏时,它不会将该连接返回到池中。共享范围之外的后续请求将永远不会获得相同的连接。

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

请注意,上面的属性值适用于 WebSphere Application Server Liberty。如果使用传统方式,ValidateAllConnections 将作为 FailingConectionOnly 加上 defaultPretestOptimizationOverride=true 的组合来完成。

关于java - 服务器如何/何时知道连接已失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47694418/

相关文章:

generics - 用于处理泛型参数的 JDK 接口(interface)

java - Eclipse 的环境变量

java - 如何使 Websphere App 将每个应用程序日志条目重定向到不同的文件?

PHP 和 mod_dbd

java - 如何在 Spring 分页中获取下一页

websphere - 启动Websphere应用程序服务器

java - 从 Tomcat 迁移到 WAS

java - Neo4j Bolt 驱动程序连接池

java - tomcat 池未重置池。连接错误太多

c# - 从 C# 数据类生成 Java 数据类 - 是否有现成的工具/方法?