dbcp 连接属性
官方文档 https://commons.apache.org/proper/commons-dbcp/configuration.html 里详细写了每个属性的意义
属性 |
描述 |
username |
|
password |
|
url |
example: jdbc:oracle:thin:@192.168.100.1:1521:orcl |
driverClassName |
example: oracle.jdbc.driver.OracleDriver |
connectionProperties |
连接时的属性,分号分隔 propertyName=property; |
属性 |
默认值 |
描述 |
defaultAutoCommit |
driver default |
auto-commit 状态,如果没有设置,则使用 driver 的默认值 |
defaultReadOnly |
driver default |
read-only 状态,如果没有设置,则使用 driver 的默认值 |
defaultTransactionIsolation |
driver default |
默认的事务隔离类型 NONE \ READ_COMMITTED \ READ_UNCOMMITTED \ REPEATABLE_READ \ SERIALIZABLE |
defaultCatalog |
|
比如 mysql 和sqlserver 可以指定哪个库 |
cacheState |
true |
auto-commit 和 read-only 的状态在第一次读和写就缓存了,避免额外的查询和 getter 调用 |
defaultQueryTimeout |
null |
null 使用 driver 的默认值,或者是一个 Integer 表示 超时时间 |
enableAutoCommitOnReturn |
true |
true 当connections被归还给pool 时,设置 Connection.setAutoCommit(true) |
rollbackOnReturn |
true |
true 当 auto-commit 没被启用,而且不是 read-only 时,roll back 当 connection 被归还给 pool时 |
dbcp pool 属性
属性 |
默认值 |
描述 |
initialSize |
0 |
连接池初始化的时候连接数 |
maxTotal |
8 |
连接池中最大被占用的连接数,-1 是没有限制 |
maxIdle |
8 |
连接池中最大空闲的连接数,-1 是没有限制 |
minIdle |
0 |
连接池中最小空闲的连接数,如果有空闲的连接则不用再创建一个 |
maxWaitMillis |
0 |
从连接池中获取连接的超时时间, -1 是一只等待 |
属性 |
默认值 |
描述 |
validationQuery |
0 |
测试连接的语句,在返回给申请数据库连接的 caller 之前调用,如果不设置,调用 driver 的 isValid() |
validationQueryTimeout |
no timeout |
测试连接的语句的执行超时时间 |
testOnCreate |
false |
在连接创建时是否测试有效,如果连接无效,则导致连接连接创建的 borrow 操作会失败 |
testOnBorrow |
true |
从连接池中 borrow 时是否测试有效,如果无效,则从连接池中 drop 这个连接,再次尝试 borrow |
testOnReturn |
false |
归还给连接池的时候是否测试有效 |
testWhileIdle |
false |
是否测试空闲的数据库连接 |
timeBetweenEvictionRunsMillis |
-1 |
evictor线程检测空闲连接是否有效的间隔,-1 是不启动线程 |
numTestsPerEvictionRun |
3 |
设定evictor线程在进行空闲连接检测有效时,每次检查几个链接 |
minEvictableIdleTimeMillis |
1000×60×30 |
一个连接多长时候空闲之后,被evictor线程销毁 |
softMinEvictableIdleTimeMillis |
-1 |
一个连接多长时候空闲之后,且当前连接池的空闲连接数大于最小空闲连接数 minIdle,被evictor线程销毁 |
maxConnLifetimeMillis |
-1 |
一个连接最长的生命周期,如果超过了这个时间,下一次 activation, passivation or validation test 将失败 |
logExpiredConnections |
true |
超过 maxConnLifetimeMillis 关闭连接的日志标志 |
connectionInitSqls |
null |
当连接创建时设置执行的SQL |
lifo |
true |
获取连接时的策略,true LIFO 后进先出, false FIFO 先进先出 |
属性 |
默认值 |
描述 |
poolPreparedStatements |
false |
是否启用 prepared statement pooling |
maxOpenPreparedStatements |
unlimited |
最大的 open statements,跟数据库的支持也有关系,比如最大有游标数 |
当连接被获取后,没有被释放,而且也没有执行任何操作,可以由连接池主动回收,下面就是这样的配置
Creating a Statement, PreparedStatement or CallableStatement or using one of these to execute a query (using one of the execute methods) resets the lastUsed property of the parent connection.
属性 |
默认值 |
描述 |
removeAbandonedOnMaintenance |
false |
设置 timeBetweenEvictionRunsMillis 之后,evictor线程主动回收 |
removeAbandonedOnBorrow |
false |
getNumActive() > getMaxTotal() - 3 && getNumIdle() < 2 |
removeAbandonedTimeout |
300 |
标记为 Abandoned 连接的超时时间 |
logAbandoned |
false |
是否打印日志,true 打印 stack trace,影响性能 |
abandonedUsageTracking |
false |
true 每次调用连接池中的方法都会打印 stack trace,严重影响性能 |
调用的时序图
见 官方文档 https://commons.apache.org/proper/commons-dbcp/guide/sequencediagrams.html