我正在阅读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/