0

我正在阅读有关调整 JDBC 连接池配置的内容,在Timeout Settings >> Idle Timeout部分下,它显示:

为获得最佳性能,请将空闲超时设置为零 (0) 秒,以便不会删除空闲连接。这确保了在创建新连接和禁用空闲监视器线程时通常不会受到惩罚。但是,存在数据库服务器将重置太长时间未使用的连接的风险。

这最后一句话令人不安。在 Tomcat 上,您可以将 JDBC 连接指定为内部的 JNDI 查找context.xml。我假设上面链接中的空闲超时字段对应于 Tomcat 的(DBCP)maxIdle属性。

所以我问:如果我设置maxIdle为 0 会发生什么,这告诉 DBCP 不要删除空闲连接,但随后服务器挂断(或重置)空闲连接?是否有特定的异常被调用?应用程序会挂起吗?如何缓解此类问题但仍保持maxIdle在 0?

4

1 回答 1

1

使用 Tomcat 或 DBCP 连接池,您可以通过使用验证查询来缓解此类问题,以便在从池中检出连接时检查连接的健康状况(这是validateOnBorrow属性)。

使用 Tomcat 池,您可以改为将其配置为定期验证空闲连接(validateWhileIdle我相信),而不是在每次使用时检查连接。

于 2013-07-11T14:35:57.043 回答