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

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

 

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

 

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

连接池实现该功能属性名
The Tomcat JDBC Connection PoolvalidationQuery
The Apache Commons DBCP Connection PoolvalidationQuery
c3p0 - JDBC3 Connection and Statement PoolingpreferredTestQuery
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:

数据库测试/验证查询
MySQLSELECT 1
PostgreSQLSELECT 1
Microsoft SQL ServerSELECT 1
SQLiteSELECT 1
H2SELECT 1
IngresSELECT 1
Oracleselect 1 from dual
DB2select 1 from sysibm.sysdummy1 或
SELECT current date FROM sysibm.sysdummy1
Apache DerbyVALUES 1 FROM SYSIBM.SYSDUMMY1 或
SELECT 1 FROM SYSIBM.SYSDUMMY1
HSQLDBSELECT 1 FROM any_existing_table WHERE 1=0 或
SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS
Informixselect count(*) from systables

 

DBCP:

DatabasevalidationQuerynotes
hsqldbselect 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracleselect 1 from dual
DB2select 1 from sysibm.sysdummy1
mysqlselect 1not tested
microsoft sqlselect 1not tested
postgresqlselect version();not tested
ingresselect 1not tested
derbyvalues 1not tested
H2select 1not tested

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

在Hibernate中,可以通过在配置文件中进行以下步骤来配置DBCP连接池: 1. 添加DBCP依赖 在Hibernate项目中添加DBCP依赖,例如在Maven项目中可以添加以下依赖: ``` <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> ``` 2. 配置DBCP连接池 在Hibernate配置文件中,通过添加以下配置来配置DBCP连接池: ``` <property name="connection.provider_class">org.hibernate.connection.DBCPConnectionProvider</property> <property name="hibernate.dbcp.initialSize">5</property> <property name="hibernate.dbcp.maxTotal">20</property> <property name="hibernate.dbcp.maxIdle">10</property> <property name="hibernate.dbcp.minIdle">5</property> <property name="hibernate.dbcp.maxWaitMillis">5000</property> <property name="hibernate.dbcp.testOnBorrow">true</property> <property name="hibernate.dbcp.validationQuery">SELECT 1 FROM DUAL</property> ``` 其中,`connection.provider_class`指定了使用DBCP连接池,`hibernate.dbcp.*`属性用于配置连接池的相关参数,例如`initialSize`表示连接池初始连接数,`maxTotal`表示连接池最大连接数,`maxIdle`表示连接池最大空闲连接数,`minIdle`表示连接池最小空闲连接数,`maxWaitMillis`表示获取连接的最大等待时间,`testOnBorrow`表示在获取连接时是否测试连接的可用性,`validationQuery`表示测试连接可用性的SQL语句。 3. 配置数据库连接信息 在Hibernate配置文件中,需要添加以下配置来指定数据库连接信息: ``` <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydatabase</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> ``` 其中,`hibernate.connection.driver_class`指定了数据库驱动类,`hibernate.connection.url`指定了数据库连接URL,`hibernate.connection.username`和`hibernate.connection.password`分别指定了数据库用户名和密码。 通过以上配置,就可以在Hibernate中成功配置DBCP连接池了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值