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 | 默认隔离级别,默认是数据库的隔离级别,目前支持如下几种设置队列
|
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表明每次在数据库链接池上调用方法是,链接池都会记录调用的堆栈信息。 |