DBCP 应用的总结
1.Jar包下载
首先,下载必须的jar包
dbcp包:http://jakarta.apache.org/commons/dbcp/
pool包:http://jakarta.apache.org/commons/pool/,
如果下载的pool包是1.2的版本,还要下载common-collections包:
2.配置参数
username : 连接用户名
password: 连接密码
url : 连接 url( 如果连接 mysql ,格式为 jdbc:mysql://ip:port/dbname)
driverClassName : jdbc driver 名字 ( 如果是 mysql ,则为com.mysql.jdbc.Driver)
connectionProperties : 当建立一个数据库连接的时候,这些属性参数将传给 jdbc driver ,参数的形式必须是 [propertyName=property;]* 。
注: username 和 password 必须明确的传给 driver, 不必包含在这个属性中。
initialSize : 默认值是 0, 连接池创建连接的初始连接数目
maxActive : 默认值是 8, 连接池中同时可以分派的最大活跃连接数
maxIdle : 默认是 8 ,连接池中最大空闲连接数
minIdle : 默认是 0, 连接数中最小空闲连接数
maxWait : 默认值是无限大,当连接池中连接已经用完了,等待建立一个新连接的最大毫秒数 ( 在抛异常之前 )
validationQuery : 一条 sql 语句,用来验证数据库连接是否正常。这条语句必须是一个查询模式,并至少返回一条数据。一般用“ select 1 ”
testOnBorrow : 默认值是 true ,当从连接池取连接时,验证这个连接是否有效
testOnReturn : 默认值是 flase, 当从把该连接放回到连接池的时,验证这个连接是否有效
testWhileIdle : 默认值是 false, 当连接池中的空闲连接是否有效
timeBetweenEvictionRunsMilis : 默认值是 -1 ,每隔一段多少毫秒跑一次回收空闲线程的线程
numTestsPerEvictionRun : 默认值是 3 ,每次验证空闲连接的连接数目
minEvictableIdleTimeMilis : 默认值是 1000 * 60 * 30(30 分钟 ) ,连接池中连接可空闲的时间
connectionInitSqls : 默认值是 null, 一组用来初始化连接的 sql 语句,这些语句只在连接工厂创建连接时执行一次。
removeAbandoned : 默认值是 false, 是否清理 removeAbandonedTimeout 秒没有使用的活动连接 , 清理后并没有放回连接池
removeAbandonedTimeout : 默认值是 300( 秒 ), 活动连接的最大空闲时间
logAbandoned : 默认值 false, 连接池收回空闲的活动连接时是否打印消息
注:
1. 红色字体的属性一般都会设置
2. minEvictableIdleTimeMilis,removeAbandonedTimeout 这两个参数针对的连接对象不一样,minEvictableIdleTimeMillis 针对连接池中的连接对象 ,removeAbandonedTimeout 针对未被 close 的活动连接 (被调用,不在池中的连接对象 )
3. maxWait 、 timeBetweenEvictionRunsMilis 、 minEvictableIdleTimeMilis 单位是毫秒,removeAbandonedTimeout 单位是秒
3. 异常处理
testOnBorrow : 顾明思义,就是在进行borrowObject进行处理时,对拿到的connection进行validateObject校验
testOnReturn : 顾明思义,就是在进行returnObject对返回的connection进行validateObject校验,个人觉得对数据库连接池的治理意义不大
testWhileIdle : 关注的重点,GenericObjectPool中针对pool治理,起了一个Evict的TimerTask定时线程进行控制(可通过设置参数timeBetweenEvictionRunsMillis>0),定时对线程池中的链接进行validateObject校验,对无效的链接进行封闭后,会调用ensureMinIdle,适当建立链接保证最小的minIdle连接数。
timeBetweenEvictionRunsMillis,设置的Evict线程的时间,单位ms,大于0才会开启evict检查线程
validateQuery, 代表检查的sql
validateQueryTimeout, 代表在执行检查时,通过statement设置,statement.setQueryTimeout(validationQueryTimeout)
numTestsPerEvictionRun,代表每次检查链接的数目,建议设置和maxActive一样大,这样每次可以有效检查所有的链接.
数据库链接 常见的问题:
1. 数据库意外重启后,原先的数据库连接池能自动废弃老的无用的链接,建立新