Spring学习(三)之DBCP数据源

9 篇文章 0 订阅
4 篇文章 0 订阅

学习《精通Spring+4.x++企业应用开发实战》 记录笔记,以备以后使用。


DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池。


“8小时问题”:MySQL在默认情况下如果发现一个连接的空闲时间超过8小时,则将会在数据库端自动关闭这个连接。

                      数据源不知道,还是会将这个无用的连接返回给某个DAO,DAO会报出无法获取Connection的异常。

 

DBCP参数:

分类属性默认值说明
事务属性defaultAutoCommittrue连接池创建的连接的默认auto-commit状态
 defaultReadOnly驱动默认连接池创建的连接的默认read-only状态。
如果没有设置,则setReadOnly()方法将不会被调用
 defaultTransactionIsolation驱动默认 连接池创建的连接的默认的TransactionIsolation状态,可选值包括:NONE
READ_COMMITTED、READ_UNCOMMITTED、
REPEATABLE_READ和SERIALIZABLE
数据源连接数量initialSize0初始化连接:
        连接池启动时创建的初始化连接数量
 maxActive8最大活动连接:
       连接池在同一时间能够分配的最大活动连接数量。
       若设为非正数则表示不限制。
 maxIdle8最大空闲连接:
        连接池中允许保持空闲状态的最大连接数量,超过的空闲连接将被释放。
        若设为负数,则表示不限制。
 minIdle0最小空闲连接:
        连接池中允许保持空闲状态的最小连接数量,低于这个数量将创建新的连接。
        若为0,则不创建。
 maxWait无限最大等待时机:
        当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数)
        超过时间则抛出异常
        若设为-1,则表示无限等待
连接健康情况维护和检测validationQuery无默认值SQL查询语句。
       在将连接返回给调用者之前,用此SQL验证从连接池取出的连接是否可用。若指定,则查询必须是一个SQL SELECT,并且必须返回至少一行记录。在MySQL中可以设置为“select 1”,在Oracle中可以设置为“select 1 from dual”
 testOnBorrowtrue        指明是否在从连接池中取出连接前进行检验,如果检验失败,则从连接池中去除该连接并尝试取出另一个新的连接。
注意:设为true后如果要生效,则validationQuery参数必须正确设置
 testOnReturnfalse       指明是否在归还到连接池中起岸进行检验。
注意:设为true后如果要生效,则validationQuery参数必须正确设置
 testWhileIdlefalse        指明连接是否被空闲连接回收器(若有)进行检验。
注意:设为true后如果要生效,则validationQuery参数必须正确设置
 timeBetweenEvictionRunsMillis-1        空闲连接回收器线程运行的周期。
        单位:毫秒
        若为非正数,则不运行空闲连接回收器线程。
注意:设为true后如果要生效,则validationQuery参数必须正确设置
 numTestsPerEvictionRun3        在每次空闲连接回收器线程(若有)运行时检查的连接数量
 minEvictableIdleTimeMillis1000*60*30        连接在可被空闲连接回收前已经在连接池中的空闲时间
        单位:毫秒
缓存语句poolPreparedStatementsfalse         开启连接池的prepared statement池功能。
当设为true时,所有CallableStatement和PreparedStatemen都会被缓存起来
 maxOpenPreparedStatements无限制        PreparedStatement池能够同时分配的打开的statements的最大数量。
若设为0,则表示不限制
连接泄露回收removeAbandonedfalse         标记是否删除泄露的连接。
         如果removeAbandoned设置为true,那么“存在泄露嫌疑”的连接可能被连接池主动清除,这个机制在(getNumIdle()<2) and (getNumActive()>getMaxActive()-3)条件满足时被触发。举例来说:当maxActive=20,活动连接为18,空闲连接为1时,可以触发removeAbandoned动作。
但是活动连接只有在未被使用的时间超过removeAbandonedTimeout时才被回收,默认为300秒。若应用需要一个进行长时间操作的连接,则需要考虑将removeAbandonedTimeout设置得更长一些,否则可能发生正常连接被强制清除的情况
 removeAbandonedTimeout300       泄露的连接可以回收的超时值
单位:
 logAbandonedfalse       标记当Statement或连接被泄露时是否打印工程的stack traces日志。被泄露的Statements和连接的日志添加在每个连接打开或者生成新的Statement,因为需要生成stack trace。


 testOnBorrow默认为true,在高并发的应用中将会带来性能问题。

高效方式:将testOnBorrow设置为false,testWhileIdle设置为true,再设置timeBetweenEvictionRunsMillis.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值