DBCP连接池参数

2023-11-03

DBCP连接池参数说明如下:  
1、maxActive="10":表示并发情况下最大可从连接池中获取的连接数。 
2、maxIdle="5":如果在并发时达到了maxActive=10,那么连接池就必须从数据库中获取10个连接来供应用程序使用,当应用程序关闭连接后,由于maxIdle=5,因此并不是所有的连接都会归还给数据库,将会有5个连接保持在连接池种中,状态为空闲。由于我们没有使用minEvictableIdleTimeMillis参数,因此空闲连接不会因为超时而被回收. 
3、minIdle="2":minIdle默认情况下为0,并不生效,它的含义是当连接池中的连接少于minIdle时,系统监控线程将启动补充线程,一般情况下我们并不启动补充线程。minIdle是否生效,跟timeBetweenEvictionRunsMillis有关系,只有当timeBetweenEvictionRunsMillis(默认-1)不是负数时,minIdle才会生效,因为这个参数是说每隔多久启动补充线程来判断空闲连接数是否低于minIdle,如果低于minIdle,则创建一个新连接放入连接池,并且判断是否有空闲连接空闲的时间大于minEvictableIdleTimeMillis参数设定的时间,如果大于,则释放该连接。因此这也就是我为什么将minIdle设置为0的原因(既然不使用minEvictableIdleTimeMillis参数,minIdle就无用)。 
4、initialSize:默认为0,启动时初始化的连接池的连接数。 
5、timeBetweenEvictionRunsMilis : 默认值是 -1 ,每隔一段多少毫秒跑一次回收空闲 
线程的线程 
6、numTestsPerEvictionRun : 默认值是 3 ,每次验证空闲连接的连接数目 
7、minEvictableIdleTimeMilis : 默认值是 1000 * 60 * 30(30 分钟 ) ,连接池中连接 
可空闲的时间 
8、connectionInitSqls : 默认值是 null, 一组用来初始化连接的 sql 语句,这些语句只 
在连接工厂创建连接时执行一次。 
9、removeAbandoned : 默认值是 false, 是否清理 removeAbandonedTimeout 秒没 
有使用的活动连接 , 清理后并没有放回连接池  
10、removeAbandonedTimeout : 默认值是 300( 秒 ), 活动连接的最大空闲时间 
11、logAbandoned : 默认值 false, 连接池收回空闲的活动连接时是否打印消息 
注:  
1.   minEvictableIdleTimeMilis,removeAbandonedTimeout 这两个参数针对的连接对象不一样 ,minEvictableIdleTimeMillis 针对连接池中的连接对象 ,removeAbandonedTimeout 针对未被 close 的活动连接 ( 被调用,不在池中的连接对象 ) 
2.   maxWait 、 timeBetweenEvictionRunsMilis 、 minEvictableIdleTimeMilis 单位是毫秒, removeAbandonedTimeout 单位是秒 
3、timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis,他们两个配合,可以持续更新连接池中的连接对象,当timeBetweenEvictionRunsMillis 大于0时,每过timeBetweenEvictionRunsMillis 时间,就会启动一个线程,校验连接池中闲置时间超过minEvictableIdleTimeMillis的连接对象。 


tomcat的 DHCP的配置  
<Resource driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
logAbandoned="true" maxActive="20" maxIdle="2" maxWait="5000" name="system" 
removeAbandonedTimeout="60" removeAbandoned="true" 
password="xx" type="javax.sql.DataSource" 
url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=base" 
username="sa"/> 
当中的 
logAbandoned="true"  removeAbandoned="true" removeAbandonedTimeout="60" 
就是用来配置数据库断开后自动连接的。 


数据库连接池会在启动时就建立所需的若干连接,并一直保持连接状态, 
但是当数据库服务停止后,这些连接就被外部因素给中断了 
网上优化了的配置信息: 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
<property name="driverClassName" value="${db.driverClassName}"/>  
<property name="url" value="${db.url}"/>  
<property name="username" value="${db.username}"/>  
<property name="password" value="${db.password}"/>  
<!--initialSize: 初始化连接-->  
<property name="initialSize" value="5"/>  
<!--maxIdle: 最大空闲连接-->  
<property name="maxIdle" value="10"/>  
<!--minIdle: 最小空闲连接-->  
<property name="minIdle" value="5"/>  
<!--maxActive: 最大连接数量-->  
<property name="maxActive" value="15"/>  
<!--removeAbandoned: 是否自动回收超时连接-->  
<property name="removeAbandoned" value="true"/>  
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
<property name="removeAbandonedTimeout" value="180"/>  
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->  
<property name="maxWait" value="3000"/>  
<property name="validationQuery">  
<value>SELECT 1</value>  
</property>  
<property name="testOnBorrow">  
<value>true</value>  
</property>  
</bean>  

dbcp配置中文版本,自apache 官方文档 
原文请见http://commons.apache.org/dbcp/configuration.html。 

参数  描述 
username  传递给JDBC驱动的用于建立连接的用户名 
password  传递给JDBC驱动的用于建立连接的密码 
url  传递给JDBC驱动的用于建立连接的URL 
driverClassName  使用的JDBC驱动的完整有效的java 类名 
connectionProperties  当建立新连接时被发送给JDBC驱动的连接参数, 
格式必须是 [propertyName=property;]* 
注意 :参数user/password将被明确传递,所以不需要包括在这里。 

参数  默认值  描述 
defaultAutoCommit  true  连接池创建的连接的默认的auto-commit状态 
defaultReadOnly  driver default  连接池创建的连接的默认的read-only状态. 
如果没有设置则setReadOnly方法将不会被调用. (某些驱动不支持只读模式,比如:Informix) 
defaultTransactionIsolation  driver default  连接池创建的连接的默认的TransactionIsolation状态. 
下面列表当中的某一个: (参考javadoc) 

    * NONE 
    * READ_COMMITTED 
    * READ_UNCOMMITTED 
    * REPEATABLE_READ 
    * SERIALIZABLE 

defaultCatalog   连接池创建的连接的默认的catalog 

参数  默认值  描述 
initialSize  0  初始化连接:连接池启动时创建的初始化连接数量,1.2版本后支持 
maxActive  8  最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 
如果设置为非正数则表示不限制 
maxIdle  8  最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放, 
如果设置为负数表示不限制 
minIdle  0  最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接, 
如果设置为0则不创建 
maxWait  无限  最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数), 
超过时间则抛出异常,如果设置为-1表示无限等待 

参数  默认值  描述 
validationQuery   SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定, 
则查询必须是一个SQL SELECT并且必须返回至少一行记录 
testOnBorrow  true  指明是否在从池中取出连接前进行检验,如果检验失败, 
则从池中去除连接并尝试取出另一个. 
注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串 
testOnReturn  false  指明是否在归还到池中前进行检验 
注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串 
testWhileIdle  false  指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败, 
则连接将被从池中去除. 
注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串 
timeBetweenEvictionRunsMillis  -1  在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. 
如果设置为非正数,则不运行空闲连接回收器线程 
numTestsPerEvictionRun  3  在每次空闲连接回收器线程(如果有)运行时检查的连接数量 
minEvictableIdleTimeMillis  1000 * 60 * 30  连接在池中保持空闲而不被空闲连接回收器线程 
(如果有)回收的最小时间值,单位毫秒 

参数  默认值  描述 
poolPreparedStatements  false  开启池的prepared statement 池功能 
maxOpenPreparedStatements  不限制  statement池能够同时分配的打开的statements的最大数量, 
如果设置为0表示不限制 


这里可以开启PreparedStatements池. 当开启时, 将为每个连接创建一个statement池, 
并且被下面方法创建的PreparedStatements将被缓存起来: 
    * public PreparedStatement prepareStatement(String sql) 
    * public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) 
注意: 确认连接还有剩余资源可以留给其他statement 
参数  默认值  描述 
accessToUnderlyingConnectionAllowed  false  控制PoolGuard是否容许获取底层连接 


如果容许则可以使用下面的方式来获取底层连接: 
    Connection conn = ds.getConnection(); 
    Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate(); 
    ... 
    conn.close(); 

默认false不开启, 这是一个有潜在危险的功能, 不适当的编码会造成伤害. 
(关闭底层连接或者在守护连接已经关闭的情况下继续使用它).请谨慎使用, 
并且仅当需要直接访问驱动的特定功能时使用. 
注意: 不要关闭底层连接, 只能关闭前面的那个. 
参数  默认值  描述 
removeAbandoned  false  标记是否删除泄露的连接,如果他们超过了removeAbandonedTimout的限制. 
如果设置为true, 连接被认为是被泄露并且可以被删除,如果空闲时间超过removeAbandonedTimeout. 
设置为true可以为写法糟糕的没有关闭连接的程序修复数据库连接. 
removeAbandonedTimeout  300  泄露的连接可以被删除的超时值, 单位秒 
logAbandoned  false  标记当Statement或连接被泄露时是否打印程序的stack traces日志。 
被泄露的Statements和连接的日志添加在每个连接打开或者生成新的Statement, 
因为需要生成stack trace。 


如果开启"removeAbandoned",那么连接在被认为泄露时可能被池回收. 这个机制在(getNumIdle() < 2) 
and (getNumActive() > getMaxActive() - 3)时被触发. 
举例当maxActive=20, 活动连接为18,空闲连接为1时可以触发"removeAbandoned". 
但是活动连接只有在没有被使用的时间超过"removeAbandonedTimeout"时才被删除,默认300秒. 
在resultset中游历不被计算为被使用. 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DBCP连接池参数 的相关文章

  • shiro入门详解以及使用方法、shiro认证与shiro授权

    shiro介绍 什么是shiro shiro是Apache的一个开源框架 它将软件系统的安全认证相关的功能抽取出来 实现用户身份认证 权限授权 加密 会话管理等功能 组成了一个通用的安全认证框架 它可以实现如下的功能 1 验证用户 2 对用

随机推荐

  • 字符串的输入输出处理

    1391 字符串的输入输出处理 Time Limit 1 Sec Memory Limit 64 MBSubmit 333 Solved 71 Submit Status BBS Description 字符串的输入输出处理 Input 第
  • 线程安全的单例模式:饿汉模式&懒汉模式

    目录 一 单例模式 二 饿汉模式 1 特点 2 实现关键 3 代码实现 三 懒汉模式 1 特点 2 实现关键 3 代码实现 一 单例模式 单例模式 一种典型的设计模式 应用场景 一个类只能实例化一个对象 向外提供统一访问接口的场景 作用 对
  • C++基本使用--菱形继承(多继承)

    菱形继承 多继承 多继承 菱形继承 虚继承virtual 多继承 include
  • 犀牛高程点建地形gh插件电池组_Grasshopper快速生成地形

    简述 根据CAD高程点及高程信息在Grasshopper中快速生成地形模型 所需文件 CAD地形文件 所需软件 Rhino Grasshopper 插件 Human Weaverbird Meshtools Meshedit 可自行前往Fo
  • 计算机网络学习笔记:第四章

    计算机网络学习笔记 第四章 学习书籍 计算机网络 自顶向下方法 第四章 网络层 数据平面 其他章节请参阅 计算机网络 自顶向下方法 第一章 计算机网络和因特网 计算机网络 自顶向下方法 第二章 应用层 计算机网络 自顶向下方法 第三章 运输
  • 区块链技术加密算法为什么不可篡改

    区块链采用密码学的方法来保证已有数据不可能被篡改 这个是误解最多的部分 因为很多人一提到区块链就只觉得是这个 诚然 这部分很重要 而且确实区块链也因此得名 但这只是区块链的定义的一部分 这个部分的两个核心要点是 1 密码学哈希函数 2 非对
  • SpringBoot关键面试题

    什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置 properties或yml文件 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化maven
  • 如何使用 scp 将文件夹从远程复制到本地?

    问 如何使用 scp 将文件夹从远程复制到本地主机 我使用 ssh 登录到我的服务器 然后 我想将远程文件夹 foo 复制到本地 home user Desktop 我如何实现这一目标 答1 huntsbot com 高效赚钱 自由工作 s
  • Qt中关于emit和moc_*.cpp的自动生成

    关于Qt中的emit 函数 直接查看emit的定义 define emit 可以发现emit仅仅是个宏定义符号 编译器宏替换后就是个 空白 根本就不会编译它 所以代码里完全可以去掉这个符号 反之也可以在任何代码前加上这个符号 如这行代码em
  • C语言详解——枚举类型

    在程序中 可能需要为某些整数定义一个别名 我们可以利用预处理指令 define来完成这项工作 您的代码可能是 define MON 1 define TUE 2 define WED 3 define THU 4 define FRI 5
  • 说一下反三角函数atan等的角度计算值,弧度制和角度制

    我们平时在进行数学计算是 往往会用到三角函数和反三角函数 最常用的反三角函数大概就是atan了 因为这个相当于给定两点之间直线的夹角了 1 正切函数图像 这时正切函数图像 高中的我们就应该知道 正切函数是周期函数 即同一个值 有很多角度值对
  • html 中shadow DOM 的使用

    什么是shadow DOM An important aspect of web components is encapsulation being able to keep the markup structure style and b
  • antV/g2的使用

    antV g2 特点 以数据驱动 安装 npm instal antv g2 使用 准备一个容器 div div 执行代码 1 引入 import
  • 如何使用C ++以编程方式在Word文档中使用目录?

    目录 TOC 是Word文档的重要组成部分 它提供了文档内容的概述 并允许您快速导航到所需的部分 您可能会遇到需要以编程方式从Word文档中添加 提取 更新或删除目录的情况 为此 本文将教您如何使用C 处理Word文件中的目录 让我们探索以
  • D. Permutation Restoration(优先队列+贪心)

    Problem D Codeforces include
  • 学习Flask之分页插件flask_bootstrap

    这次分页功能 主要是依靠 Flask Bootstrap 首先也是下载flask bootstrap pip install flask bootstrap 安装完后可以观察里面的文件夹 里面其实还有nav 导航 form 表单 pagin
  • linux内核调试环境的搭建(使用qemu)

    这里说明下 本人调试的内核版本是2 6 11 12 为什么去调试这么 古老 的版本 原因不多说了 你手头也许正拿着ULK3 而它针对的内核版本正是2 6 11 有比这更好的理由吗 而且这个版本不算旧 已不算新 我认为还算不错 想想当下还有如
  • 我的计算机管理里面没有家庭组,Win10控制面板没有家庭组怎么解决?

    我们经常在使用电脑的时候经常会用到家庭组这个功能 家庭组使用起来非常方便的功能 但是最近很多的用户们反映Win10家庭组功能在控制面板找不到了 这个问题我们要怎么解决呢 下面小编为大家带来详细的解决教程介绍 快来看看吧 Win10控制面板没
  • 七牛云 composer 文件上传、删除、请除缓存操作

    class QiniuUp extends ModelBasic private AccessKey private SecretKey private bucket private auth function construct pare
  • DBCP连接池参数

    DBCP连接池参数说明如下 1 maxActive 10 表示并发情况下最大可从连接池中获取的连接数 2 maxIdle 5 如果在并发时达到了maxActive 10 那么连接池就必须从数据库中获取10个连接来供应用程序使用 当应用程序关