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

BasicDataSource 配置参数sql

这些配置均在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;
}

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

链接配置app

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

 

提交属性测试

参数 默认值 描述
defaultAutoCommit driverdefault

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

若是没有设置,则此方法不会被调用spa

defaultReadOnly     driverdefault

设置默认的是不是只读模式,由driver自己所决定,没有被设置的话则此方法不线程

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

defaultTransactionIsolation driverdefault

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

  • NONE
  • READ_COMMITED
  • READ_UNCOMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE
defaultCatalog   链接迟建立的默认catalog 【**不知道是干吗的,谁知道能够告知一下】
cacheState true

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

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

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

要把这个值设置false

defaultQueryTimeout     null

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

毫秒数

enableAutoCommitOnReturn true

true,链接返回时,若是自动提交设置为false ,则将使用

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

rollbackOnReturn true

若是autoCommit=false,那么当链接返还给链接池时,会在链接上调用

回滚方法,从之终止事务

链接属性

参数 默认值 描述
initialSize 0 初始化链接数
maxTotal 8 能从数据库链接池中申请到的最大链接数,设置为负值则无限制
maxIdle 8 最大空闲数,负值则无限制
minIdle 0 最小空闲数。
maxWaitMills indefinitely 从链接池中获取链接时最大的等待毫秒数,超过之后会抛出异常,设置为-1,则无限等待 

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

链接检测

参数 默认值 描述
validationQuery   测试数据库链接的字符串,例如要验证数据库链接是否正常,这个字符串一般咱们会写做 “SELECT 1”,查询必须至少返回一条记录
validationQueryTimeout no timeout 验证的链接时的超时时间。根据文档里面说的,这个单位貌似为。设置为负值的话,则这个超时时间则跟随setQueryTimeOut 方法设定的时间
testOnCreate false 建立链接时,是否执行validationQuery,若是验证失败,则链接的建立也失败
testOnBorrow true 从数据库链接池中获取链接时,进行校验,校验失败的话,则把此链接从链接池中删除,而后尝试获取另外一个
testOnReturn false 把链接归还给数据库链接池中是否进行校验
testWhileIdle false 链接是否被空闲回收器回收进行检验,若是检测失败,则从数据库链接池中删除掉
timeBetweenEvictionRunsMills -1 空闲回收器执行的间隔时间
numTestsPerEvictionRun 3 空闲回收器每次回收的线程数,之因此不是一会儿回收,是为了有一个缓慢回收的过程。这样将会有一个降低的趋势。
minEvictableIdleTimeMills 1000*60*30 链接保持空闲,可是不被空闲回收器回收的最小时间值,可是是毫秒,达到此时间,链接可能会被移除
softMinEvctqbleIdleTimeMillis -1

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

maxConnLifetimeMills -1 一个链接的生命时常。超过这个时长以后,链接将没法使用。0或者负值标示生命无限。
logExpiredConnections true 当链接因为设置maxConnLifetimeMills而被回收后,记录日志。
connectionInitSqls null 再配置初始化时,首次进行物理链接时执行的sql语句,这些语句只执行一次。
lifo true

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

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

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

链接移除

参数 默认值 描述
removeAbandonedTimeout 300 废弃链接删除以前的超时(秒为单位)时间

removeAbandonedOnMaintenacne

removeAbandonedBorrow

false

废弃链接若是超过removeAbandonedTimeout,就进行标记,这个链接将会被标记为再也不使用。建立一个startement,PreparedStatement或者CallableStatement,或者其余的任何使用execute的方法,将会重置负链接的lastUsed属性。

当removeAbandonedOnMaintenacne设置为true时,能够删除维护周期中的废弃的链接。这个属性须要和timeBetweenEvictionRunsMills属性配合使用,只有当timeBetweenEvictionRunsMills为正值时才有做用。

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

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

logAbandoned false 标记为废弃链接时记录日志。
abandonedUsageTracking false 这个设置为true会增长开销。true表明每次在数据库链接池上调用方法是,链接池都会记录调用的堆栈信息。
相关文章
相关标签/搜索