DBCP连接池参数详解-2.4.0版本

BasicDataSource 配置参数

这些配置均在dbcp源码的BasicDataSource类的createPoolableConnectionFactory方法中使用和初始化。具体代码如下:

protected PoolableConnectionFactory createPoolableConnectionFactory(final ConnectionFactory driverConnectionFactory)
        throws SQLException {
    PoolableConnectionFactory connectionFactory = null;
    try {
        connectionFactory = new PoolableConnectionFactory(driverConnectionFactory,
                ObjectNameWrapper.unwrap(registeredJmxObjectName));
        connectionFactory.setValidationQuery(validationQuery);
        connectionFactory.setValidationQueryTimeout(validationQueryTimeoutSeconds);
        connectionFactory.setConnectionInitSql(connectionInitSqls);
        connectionFactory.setDefaultReadOnly(defaultReadOnly);
        connectionFactory.setDefaultAutoCommit(defaultAutoCommit);
        connectionFactory.setDefaultTransactionIsolation(defaultTransactionIsolation);
        connectionFactory.setDefaultCatalog(defaultCatalog);
        connectionFactory.setCacheState(cacheState);
        connectionFactory.setPoolStatements(poolPreparedStatements);
        connectionFactory.setMaxOpenPreparedStatements(maxOpenPreparedStatements);
        connectionFactory.setMaxConnLifetimeMillis(maxConnLifetimeMillis);
        connectionFactory.setRollbackOnReturn(getRollbackOnReturn());
        connectionFactory.setEnableAutoCommitOnReturn(getEnableAutoCommitOnReturn());
        connectionFactory.setDefaultQueryTimeout(getDefaultQueryTimeout());
        connectionFactory.setFastFailValidation(fastFailValidation);
        connectionFactory.setDisconnectionSqlCodes(disconnectionSqlCodes);
        validateConnectionFactory(connectionFactory);
    } catch (final RuntimeException e) {
        throw e;
    } catch (final Exception e) {
        throw new SQLException("Cannot create PoolableConnectionFactory (" + e.getMessage() + ")", e);
    }
    return connectionFactory;
}

接下来就是对这些配置的说明:

连接配置

参数 说明
username数据库连接的用户名
password数据库连接的密码
url数据库连接的url
driverClassName驱动类名,就是我们用jdbc连接的时候 class.forName使用的类
connectionProperties数据库连接的属性,通常我们在数据库连接的时候,后面会设置一些属性,例如用户名,密码,连接的数据库,用的字符集等,由于数据库的用户名和密码太常见,所以就单独的拉出来作为单独属性了

 

提交属性

参数默认值描述
defaultAutoCommitdriverdefault

默认的SQL语句自动提交状态,由driver本身所决定,这个是数据库驱动默认值,

如果没有设置,则此方法不会被调用

defaultReadOnly    driverdefault

设置默认的是否是只读模式,由driver本身所决定,没有被设置的话则此方法不

会被调用,但是有些数据库是不支持此模式的 例如,infomix

defaultTransactionIsolationdriverdefault

默认隔离级别,默认是数据库的隔离级别,目前支持以下几种设置

  • NONE
  • READ_COMMITED
  • READ_UNCOMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE
defaultCatalog 连接迟创建的默认catalog 【**不知道是干嘛的,谁知道可以告知一下】
cacheStatetrue

如果是true,连接将会在第一次读和写的时候把当前的readOnly和autoCommit

设置进行缓存,然后在接下来的写操作中使用。这样的话就消除了调用getter时

的额外查询,但是如果直接访问数据库连接,则会出现不一致状态,这时候就需

要把这个值设置false

defaultQueryTimeout    null

默认查询超时时间,null代表的是数据库驱动默认的超时时间,设置时,整形,

毫秒数

enableAutoCommitOnReturntrue

true,连接返回时,如果自动提交设置为false ,则将使用

Connection.setAutoCommit(true)进行检查并配置,然后返还到连接池中。                                                                

rollbackOnReturntrue

如果autoCommit=false,那么当连接返还给连接池时,会在连接上调用

回滚方法,从之终止事务

连接属性

参数默认值描述
initialSize0初始化连接数
maxTotal8能从数据库连接池中申请到的最大连接数,设置为负值则无限制
maxIdle8最大空闲数,负值则无限制
minIdle0最小空闲数。
maxWaitMillsindefinitely从连接池中获取连接时最大的等待毫秒数,超过以后会抛出异常,设置为-1,则无限等待 

注意⚠️:如果maxIdle设置的太小,当应用的负载比较高时,连接数会很快的超过maxIdle,但是应用使用完以后会立即被回收,但是此时应用负载依然很高,应用会再此申请连接,这时候连接数️会超过maxIdle,但是会永远小于maxTotal,出现这种情况会连接会一直被创建然后销毁,来来回回往往复复,连接数就会在maxIdle上下来回震荡。针对负载比较高的应用,最好设置maxIdle接近于maxTotal,例如设置的数量为maxTotal-1甚至等于maxTotal,或者无限制。

连接检测

参数默认值描述
validationQuery 测试数据库连接的字符串,例如要验证数据库连接是否正常,这个字符串通常我们会写作 “SELECT 1”,查询必须至少返回一条记录
validationQueryTimeoutno timeout验证的连接时的超时时间。根据文档里面说的,这个单位貌似为。设置为负值的话,则这个超时时间则跟随setQueryTimeOut 方法设定的时间
testOnCreatefalse创建连接时,是否执行validationQuery,如果验证失败,则连接的创建也失败
testOnBorrowtrue从数据库连接池中获取连接时,进行校验,校验失败的话,则把此连接从连接池中删除,然后尝试获取另一个
testOnReturnfalse把连接归还给数据库连接池中是否进行校验
testWhileIdlefalse连接是否被空闲回收器回收进行检验,如果检测失败,则从数据库连接池中删除掉
timeBetweenEvictionRunsMills-1空闲回收器执行的间隔时间
numTestsPerEvictionRun3空闲回收器每次回收的线程数,之所以不是一下子回收,是为了有一个缓慢回收的过程。这样将会有一个下降的趋势。
minEvictableIdleTimeMills1000*60*30连接保持空闲,但是不被空闲回收器回收的最小时间值,但是是毫秒,达到此时间,连接可能会被移除
softMinEvctqbleIdleTimeMillis-1

连接保持的空闲时间,达到此值后,空闲连接将会被移除。并且保留“minIdle”个空闲连接数。默认值为-1。当MinEvictableIdleTimeMills设置为正值,minEvictableIdleTimeMills首先会被空闲移除器检查,当空闲移除器访问连接时,首先将空闲时间和minEvictableIdleTimeMills进行比较(不考虑数据库连接池中空闲连接的数量),然后再针对softMinEvctqbleIdleTimeMillis设置的线程进行时间比较。

maxConnLifetimeMills-1一个连接的生命时常。超过这个时长之后,连接将无法使用。0或者负值标示生命无限。
logExpiredConnectionstrue当连接由于设置maxConnLifetimeMills而被回收后,记录日志。
connectionInitSqlsnull再配置初始化时,首次进行物理连接时执行的sql语句,这些语句只执行一次。
lifotrue

这个设置标示如何从数据库连接池中获取连接:

true:表示一个LIFO,也就是后进先出的一个队列

false:表示FIFO,先进先出的一个队列,这些设置会影响到连接线程的回收顺序。

连接移除

参数默认值描述
removeAbandonedTimeout300废弃连接删除之前的超时(秒为单位)时间

removeAbandonedOnMaintenacne

removeAbandonedBorrow

false

废弃连接如果超过removeAbandonedTimeout,就进行标记,这个连接将会被标记为不再使用。创建一个startement,PreparedStatement或者CallableStatement,或者其他的任何使用execute的方法,将会重置负连接的lastUsed属性。

当removeAbandonedOnMaintenacne设置为true时,可以删除维护周期中的废弃的连接。这个属性需要和timeBetweenEvictionRunsMills属性配合使用,只有当timeBetweenEvictionRunsMills为正值时才有作用。

removeAbandonedBorrow为true,则每次从连接池中拿连接时都会删除废弃的连接。限制如下:

getNumActive()> getMaxTotal()-3 and getNumIdle()<2

logAbandonedfalse标记为废弃连接时记录日志。
abandonedUsageTrackingfalse这个设置为true会增加开销。true代表每次在数据库连接池上调用方法是,连接池都会记录调用的堆栈信息。

 

转载于:https://my.oschina.net/u/2457218/blog/1858407

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值