【发布时间】:2017-06-19 07:18:27
【问题描述】:
由于各种原因,池中的连接可能会失效:服务器连接超时、网络问题...
我的理解是,Tomcat JDBC 连接池不保证它提供给应用程序的连接的有效性。
为了防止(实际上只是降低风险)从池中获取无效连接,解决方案似乎是连接验证的配置。验证连接意味着在数据库上运行一个非常基本的查询(例如,SELECT 1; 在 MySQL 上)。
Tomcat JDBC 连接池提供了几个选项来测试连接。我觉得比较有趣的两个是testOnBorrow 和testWhileIdle。
首先我认为testOnBorrow 是最好的选择,因为它基本上在将连接提供给应用程序之前验证连接(最大频率由validationInterval 定义)。
但过了一秒钟,我意识到在使用连接之前测试连接可能会影响应用程序的响应能力。所以我认为使用testWhileIdle 会更有效,因为它会在不使用时测试连接。
无论我选择哪个选项,似乎它们只会降低获得无效连接的风险,但这种风险仍然存在。
所以我最终问:我应该使用testOnBorrow 还是testWhileIdle 还是两者兼而有之?
顺便说一句,我很惊讶validationInterval 不适用于testOnReturn,而且我真的不明白testOnConnect 的用途。
【问题讨论】:
标签: tomcat jdbc connection-pooling