tomcat jndi 数据源参数说明 以及validationQuery使用

老是忘记这些具体的意义。现在把它收藏起来。


org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory      //负责解析jndi数据源配置

org.apache.tomcat.dbcp.dbcp.BasicDataSource                  //所有配置信息都保持在这里,如果要看默认值也可以在这个类中查看。

 

 

defaultAutoCommit                    //默认是否自动提交
defaultReadOnly                        //是否只读
defaultTransactionIsolation       //数据库隔离级别
defaultCatalog                            //数据库名称
driverClassName                       //驱动程序名称
maxActive                                 //最大连接
maxIdle                                     //最大空闲数
minIdle                                      //最小空闲数
initialSize                                  //初始化大小
maxWait                                    //最大等待时间
testOnBorrow                            //借出对象时是否测试
testOnReturn                                       //归还对象时是否测试
timeBetweenEvictionRunsMillis             //验证对象的时间间隔
numTestsPerEvictionRun                   //每次检测对象个数
minEvictableIdleTimeMillis              //空闲时间超过多长就自动断开
testWhileIdle                             //空闲时是否测试对象
password  
url  
username  
validationQuery                         //验证连接的查询语句
validationQueryTimeout           //验证连接查询语句超时时间
initConnectionSqls                   //初始化脚本,连接创建成功时执行
accessToUnderlyingConnectionAllowed
removeAbandoned                   //是否关闭那些长时间占用但没有进行实际SQL操作的连接
removeAbandonedTimeout                //长时间没有实际操作SQL的时间
logAbandoned                           //是否对长时间占用,但没有实际操作SQL的连接,打印Stacktrace
poolPreparedStatements 
maxOpenPreparedStatements

示例:

  auth="Container"
  type="javax.sql.DataSource"
  driverClassName="com.mysql.jdbc.Driver"
  url="jdbc:mysql://127.0.0.1:3306/databaseName?autoReconnect=true"
  username="uname"
  password="upass"
  maxActive="20" maxIdle="10" maxWait="10000"
  validationQuery = "SELECT 1" 
timeBetweenEvictionRunsMillis = "300000" 
  minEvictableIdleTimeMillis = "1800000"
     testWhileIdle = "true"
  />


关于validationQuery属性:

在《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

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

数据库 测试/验证查询
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


转载于:https://my.oschina.net/cyintl/blog/646870

你可能感兴趣的:(java,数据库)