JDBC/DBCP连接池的testQuery/validationQuery设置

转载了新浪@mryqu的博客,并添写了DBCP的设置,以下是正文:

在《Tomcat中使用Connector/J连接MySQL的超时问题》帖子中想要增加对连接池中连接的测试/验证,防止数据库认为连接已死而Web应用服务器认为连接还有效的问题,Mysql文档中提到Tomcat文档中的例子中用的是validationQuery,但是网上还有很多帖子写的是testQuery,到底用哪一个呢?

原来这跟连接池的实现有关:

连接池实现 该功能属性名
The Tomcat JDBC Connection Pool validationQuery
The Apache Commons DBCP Connection Pool validationQuery
c3p0 - JDBC3 Connection and Statement Pooling preferredTestQuery
Atomikos:Tomcat Spring ActiveMQ MySQL JMX Integration
分析Atomikos数据连接池源码,弄清testQuery
testQuery



此外,测试/验证连接池连接的SQL语句也因数据库而异:
Efficient SQL test query or validation query that will work across all (or most) databases
DBCP - validationQuery for different Databases

综合上述两个帖子,汇总结果如下:

JDBC:

数据库 测试/验证查询
MySQL SELECT 1
PostgreSQL SELECT 1
Microsoft SQL Server SELECT 1
SQLite SELECT 1
H2 SELECT 1
Ingres SELECT 1
Oracle select 1 from dual
DB2 select 1 from sysibm.sysdummy1 或
SELECT current date FROM sysibm.sysdummy1
Apache Derby VALUES 1 FROM SYSIBM.SYSDUMMY1 或
SELECT 1 FROM SYSIBM.SYSDUMMY1
HSQLDB SELECT 1 FROM any_existing_table WHERE 1=0 或
SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS
Informix select count(*) from systables

DBCP:

Database validationQuery notes
hsqldb select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle select 1 from dual
DB2 select 1 from sysibm.sysdummy1
mysql select 1 not tested
microsoft sql select 1 not tested
postgresql select version(); not tested
ingres select 1 not tested
derby values 1 not tested
H2 select 1 not tested

原文链接:http://blog.sina.com.cn/s/blog_72ef7bea0101hpj8.html

猜你喜欢

转载自blog.csdn.net/Demo_Liu/article/details/82621844
今日推荐