我正在阅读tuning JDBC connection pool configurations上的“超时设置>>空闲超时”部分,其内容为:


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


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

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

最佳答案

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

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

关于java - Tomcat/DBCP空闲超时:如果服务器挂起怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17595834/

10-11 19:32