http://blog.csdn.net/kerafan/article/details/50382998

common-dbcp2数据库连接池参数说明

由于commons-dbcp所用的连接池出现版本升级,因此commons-dbcp2中的数据库池连接配置也发生了变化,具体的参数配置说明如下:

参数                             描述

username
(用户名)
通过JDBC建立一个连接所需的用户名
password
(密码)
通过JDBC建立一个连接所需的密码
url
(JDBC连接串)
通过JDBC建立一个连接所需的URL
driverClassName
(JDBC驱动程序)
所使用的JDBC驱动的类全名
connectionProperties
(连接属性)
连接参数是在建立一个新连接时发送给JDBC驱动的
字符串的格式必须是[参数名=参数值;]
提示:用户名和密码属性是需要明确指出的,所以这两个参数不需要包含在这里

参数                                       缺省值           描述

defaultAutoCommit
(自动提交)
JDBC驱动的缺省值 通过这个池创建连接的默认自动提交状态。如果不设置,则setAutoCommit 方法将不被调用。
defaultReadOnly
(只读设置)
JDBC驱动的缺省值 通过这个池创建连接的默认只读状态。如果不设置,则setReadOnly  方法将不被调用。(部分驱动不支持只读模式,如:Informix)
defaultTransactionIsolation
(事务隔离级别)
JDBC驱动的缺省值 通过这个池创建连接的默认事务隔离策略,设置值为下列中的某一个: (参考 javadoc)(看笔记中另外一篇事务属性小结)

  • NONE
  • READ_COMMITTED
  • READ_UNCOMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE
defaultCatalog
(目录,类似于与模式名,但比模式名更加抽象,Oracle、MySQL不支持,其他,MS SQL Server = 数据库名)
  通过这个池创建连接的默认缺省的catalog 
cacheState
(缓存状态)
true 如果设置为true,池化的连接将在第一次读或写,以及随后的写的时候缓存当前的只读状态和自动提交设置。这样就省去了对getter的任何进一步的调用时对数据库的额外查询。如果直接访问底层连接,只读状态和/或自动提交设置改变缓存值将不会被反映到当前的状态,在这种情况下,应该将该属性设置为false以禁用缓存。
defaultQueryTimeout
(查询超时时间)
null 如果值不为null,指定一个整数值,用于在创建Statement时,指定为查询超时时间。如果设置为null,则使用驱动程序默认设置。
enableAutocommitOnReturn
(连接归还到池时,设置为自动提交)
true 如果设置为true,则连接被归还到连接池时,会指定设置为autoCommit = true
rollbackOnReturn
(连接归还到池时,回滚所有操作)
true 如果设置为true,则连接被归还到连接池时,会自动执行一次rollback();前提是自动提交 = true and 非只读。

参数                         缺省值                 描述

initialSize
(初始连接数)
0 当这个池被启动时初始化的创建的连接个数,起始生效版本:1.2
maxTotal
(最大活动连接数)
8 可以在这个池中同一时刻被分配的有效连接数的最大值,如设置为负数,则不限制
maxIdle
(最大空闲连接数)
8 在池中,可以保持空闲状态的最大连接数,超出设置值之外的空闲连接在归还到连接池时将被释放,如设置为负数,则不限制
minIdle
(最小空闲连接数)
0 可以在池中保持空闲的最小连接数,低于设置值时,空闲连接将被创建,以努力保持最小空闲连接数>=minIdle,如设置为0,则不创建
这里设置的数值生效的前提是:timeBetweenEvictionRunsMillis(空闲对象驱逐线程运行时的休眠毫秒数)被设置为正数。
maxWaitMillis
(从连接池获取一个连接时,最大的等待时间)
indefinitely
(不确定)
设置为-1时,如果没有可用连接,连接池会一直无限期等待,直到获取到连接为止。
如果设置为N(毫秒),则连接池会等待N毫秒,等待不到,则抛出异常。

 提示: 如果在高负载的系统中将maxIdle的值设置的很低,则你可能会发现在一个新的连接刚刚被创建的时候就立即被关闭了。这是活跃的线程及时关闭连接要比那些打开连接的线程要快,导致空闲的连接数大于maxIdle。高负载系统中maxIdle的最合适的配置值是多样的,但是缺省值是一个好的开始点。


参数                                               缺省值          描述

validationQuery
(确认查询SQL)

validationQueryTimeout
(确认查询SQL的超时时间)

no timeout

在连接池返回连接给调用者前用来进行连接校验的查询sql。如果指定,则这个查询必须是一个至少返回一行数据的SQL SELECT语句。如果没有指定,则连接将通过调用isValid() 方法进行校验。

确认连接有效SQL的执行查询超时时间(秒)。如果设置为正数,那么会传递给JDBC驱动的setQueryTimeOut()方法,这个设置对执行【确认有效查询SQL】起作用。

testOnCreate
(连接创建后,马上验证有效性)
false 指明对象在创建后是否需要验证是否有效,如果对象验证失败,则触发对象创建的租借尝试将失败。
testOnBorrow
(从连接池获取一个连接时,验证有效性)
true 指明在从池中租借对象时是否要进行验证有效,如果对象验证失败,则对象将从池子释放,然后我们将尝试租借另一个
testOnReturn
(连接被归还到连接池时,验证有效性)
false 指明在将对象归还给连接池前是否需要校验。
testWhileIdle
(连接空闲时,验证有效性)
false 指明对象是否需要通过对象驱逐者进行校验(如果有的话),假如一个对象验证失败,则对象将被从池中释放。
timeBetweenEvictionRunsMillis
(空闲对象驱逐线程运行时的休眠毫秒数)
-1 空闲对象驱逐线程运行时的休眠毫秒数,如果设置为非正数,则不运行空闲对象驱逐线程。
numTestsPerEvictionRun
(在每个空闲对象驱逐线程运行过程中中进行检查的对象个数)
3 在每个空闲对象驱逐线程运行过程中中进行检查的对象个数。(如果有的话)
minEvictableIdleTimeMillis
(空闲的连接最低要待N毫秒后,才会被释放)
1000 * 60 * 30
(30分)
符合对象驱逐条件的对象在池中最小空闲毫秒总数(如果有的话)
softMiniEvictableIdleTimeMillis
(空闲的连接最低要待N毫秒后,才会被释放,但有额外条件)
-1 符合对象驱逐条件的对象在池中最小空闲毫秒总数,额外的条件是池中至少保留有minIdle所指定的个数的连接。当miniEvictableIdleTimeMillis 被设置为一个正数,空闲连接驱逐者首先检测miniEvictableIdleTimeMillis,当空闲连接被驱逐者访问时,首先与miniEvictableIdleTimeMillis 所指定的值进行比较(而不考虑当前池中的空闲连接数),然后比较softMinEvictableIdleTimeMillis所指定的连接数,包括minIdle条件。
maxConnLifetimeMillis
(一个连接的最大存活毫秒数)
-1 一个连接的最大存活毫秒数。如果超过这个时间,则连接在下次激活、钝化、校验时都将会失败。如果设置为0或小于0的值,则连接的存活时间是无限的。
connectionInitSqls
(连接被第一次创建时,执行的初始化SQL)
null 在第一次创建时用来初始化物理连接的SQL语句集合。这些语句只在配置的连接工厂创建连接时被执行一次。
lifo
(后进先出)
true 设置为true表明连接池(如果池中有可用的空闲连接时)将返回最后一次使用的租借对象(最后进入)。
设置为false则表明池将表现为FIFO队列(先进先出)—将会按照它们被归还的顺序从空闲连接实例池中获取连接
logExpiredConnections
(一个过期的连接被连接池关闭时,写日志标识)
true 如果连接存货时间超过maxConnLifetimeMillis,连接将被连接池会抽,此时默认输出日志。如果设置为false,这不会写日志。


参数                                             缺省值                 描述

poolPreparedStatements
(设置该连接池的预处理语句池是否生效)
false 设置该连接池的预处理语句池是否生效
maxOpenPreparedStatements
(可以在语句池中同时分配的最大语句数)
unlimited 可以在语句池中同时分配的最大语句数。设置为负数则不限制。

 这个设置同时作用于预处理语句池. 当一个可用的语句池被创建给每一个连接时,通过以下方法创建的预处理语句将被池化。

  • public PreparedStatement prepareStatement(String sql)
  • public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)

 提示 -要确保你的连接会留下一些资源给其他语句。池化预处理语句可能会在数据库中保持他们的游标,可能会引起连接的游标越界,尤其是maxOpenPreparedStatements的值被设置为默认值(无限的),而且一个应用程序可能会为每个连接打开大量不同的预处理语句。为了避免这个问题maxOpenPreparedStatements应该被设置为一个小于连接可以打开的最大游标数的值。


参数                                                         缺省值     描述

accessToUnderlyingConnectionAllowed
(控制PoolGuard是否可以访问底层连接 )
false 控制PoolGuard是否可以访问底层连接 

如果允许访问的话,使用如下代码结构:

    Connection conn = ds.getConnection();
    Connection dconn =((DelegatingConnection) conn).getInnermostDelegate();
    ...
    conn.close()

 默认值为false,这是一个有着潜在风险的操作,使用不当可能会导致非常严重的后果。(在守护连接已被关闭的情况下,关闭底层连接或者继续使用它),只有在你需要直接访问驱动的特有扩展是可以谨慎使用。

 NOTE: 除了最原始那个之外,不要关闭底层连接


参数                                       缺省值         描述

removeAbandonedOnMaintenance
removeAbandonedOnBorrow
()
false 标记是否删除超过removeAbandonedTimout所指定时间的被遗弃的连接。
如果设置为true,则一个连接在超过removeAbandonedTimeout所设定的时间未使用即被认为是应该被抛弃并应该被移除的。
创建一个语句,预处理语句,可调用语句或使用它们其中的一个执行查询(使用执行方法中的某一个)会重新设置其父连接的lastUsed 属性。
在写操作较少的应用程序中将该参数设置为true可以将数据库连接从连接关闭失败中恢复。
removeAbandonedTimeout
(一个被抛弃连接可以被移除的超时时间)
300(秒) 一个被抛弃连接可以被移除的超时时间,单位为秒
logAbandoned false 标志是否为应用程序中遗弃语句或连接的代码开启日志堆栈追踪。
因为一个堆栈跟踪已被创建,被抛弃的语句和连接相关的日志将被覆盖到打开每个连接或者创建一个Statement时

如果你启用了removeAbandoned,则一个连接被池回收再利用是可能的,因为它被认为是已遗弃 在(getNumIdle() < 2) and (getNumActive() > getMaxTotal() - 3)成立时,这个机制将被触发。

 例如, maxTotal=20 ,这里有18个活跃连接,一个限制连接,将触发 "removeAbandoned"。但是只有在活动连接超过 "removeAbandonedTimeout" 所指定的秒数内未使用才会被删除(默认为300秒)。遍历一个结果集并不被统计为被使用,创建一个语句,预处理语句,可调用语句或使用它们其中的一个执行查询(使用执行方法中的某一个)会重新设置其父连接的lastUsed 属性。

Parameter Default Description
fastFailValidation
(验证快速失败)
false 如果发生致命的异常,验证语句会快速失败。而不会再执行isValid(),也不再去执行验证查询语句。致命的异常码(SQL_STATE)指以下:

  • 57P01 (ADMIN SHUTDOWN)
  • 57P02 (CRASH SHUTDOWN)
  • 57P03 (CANNOT CONNECT NOW)
  • 01002 (SQL92 disconnect error)
  • JZ0C0 (Sybase disconnect error)
  • JZ0C1 (Sybase disconnect error)
  • Any SQL_STATE code that starts with "08"

想覆盖异常码,请参看 disconnectionSqlCodes 

disconnectionSqlCodes
(异常码)
null 以逗号分割的SQL_STATE码,fastFailValidation 为true时,才会生效。

 
 
2

DBCP2配置详细说明(中文翻译)的更多相关文章

  1. .NET开源类库Nini手册(INI、XML、注册表的配置应用)-中文翻译

    目录 1.简介 1.1什么是应用程序配置数据? 1.2问题 1.3介绍Nini 2.入门 2.1一个简单的例子 2.2默认值 2.3设置.保存和删除键 2.4添加和删除配置 2.5键值扩展 3.高级主 ...

  2. Spark官方文档 - 中文翻译

    Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...

  3. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

  4. Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)

    # 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译) - 原文 <https://githu ...

  5. 中文翻译:pjsip文档(四)之ICE Session的使用方法

    1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...

  6. [资料] Apache2 的 httpd.conf 经典中文翻译

    [i=s] 本帖最后由 www.PHP888.com 于 2009-5-22 13:40 编辑 [/i] # 基于 NCSA 服务的配置文件. # #这是Apache服务器主要配置文件. #它包含服务 ...

  7. Next.js v4.1.4 文档中文翻译【转载】

    最近想稍稍看下 React的 SSR框架 Next.js,因为不想看二手资料, 所以自己跑到 Github上看,Next.js的文档是英文的,看倒是大概也能看得懂, 但有些地方不太确定,而且英文看着毕 ...

  8. python wsgi PEP333 中文翻译

    PEP 333 中文翻译 首先说明一下,本人不是专门翻译的,英文水平也不敢拿来献丑.只是这是两年前用python的时候为了自己学习方便而翻译的,记录着笔记自己看看而已.最近翻出来看看觉得还是放出来吧. ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新

    为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

随机推荐

  1. Python内置数据结构之列表list

    1. Python的数据类型简介 数据结构是以某种方式(如通过编号)组合起来的数据元素(如数.字符乃至其他数据结构)集合.在Python中,最基本的数据结构为序列(sequence). Python内 ...

  2. vue路由跳转传参

    this.$router.push({ path: '/message/result_notice', query: { id: id } }) // let type = this.$route.n ...

  3. linux 删除命令注意事项(大神勿看)

    在做软连接的时候,想到一个问题,如果删除软连接,会不会删除源文件. 如果删除是真删除的话,一旦操作错误那就后悔去吧. 效果是这样的:#rm -rf pp/          如果pp是软连文件夹,那么 ...

  4. 洛谷3627 [APIO2009]抢掠计划

    题目描述 输入格式: 第一行包含两个整数 N.M.N 表示路口的个数,M 表示道路条数.接下来 M 行,每行两个整数,这两个整数都在 1 到 N 之间,第 i+1 行的两个整数表示第 i 条道路的起点 ...

  5. GET和POST请求的核心区别

    GET请求具有幂等性,而POST请求没有.

  6. Python学习笔记-练习编写ATM+购物车(购物商城)

    作业需求: 模拟实现一个ATM + 购物商城程序: 1.额度 15000或自定义 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账 3.可以提现,手续费5% 4.支持多账户登录 5.支持账户间 ...

  7. hdu 2191 悼念512汶川大地震遇难同胞——珍惜如今,感恩生活

    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ...

  8. [React] Use React Fragments to make your DOM tree cleaner

    In this lesson, we will look at Fragments and how they are useful in achieving a cleaner DOM structu ...

  9. 设置linux session 编码

    设置linux session 编码 export LANG=zh_CN.utf-8

  10. 41.AngularJS 服务(Service)

    转自:https://www.cnblogs.com/best/tag/Angular/ 什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. A ...