DBCP连接池配置参数说明

2023-10-31

<!-- 数据源1 -->
    <bean id="dataSource"
          class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://192.168.0.109:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <!--maxActive: 最大连接数量-->  
        <property name="maxActive" value="150"/>
        <!--minIdle: 最小空闲连接-->  
        <property name="minIdle" value="5"/>
        <!--maxIdle: 最大空闲连接-->  
        <property name="maxIdle" value="20"/>
        <!--initialSize: 初始化连接-->  
        <property name="initialSize" value="30"/>
        <!-- 连接被泄露时是否打印 -->
        <property name="logAbandoned" value="true"/>
        <!--removeAbandoned: 是否自动回收超时连接-->  
        <property name="removeAbandoned"  value="true"/>
        <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
        <property name="removeAbandonedTimeout" value="10"/>
        <!--maxWait: 超时等待时间以毫秒为单位 1000等于60秒-->
        <property name="maxWait" value="1000"/>
        <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. -->
        <property name="timeBetweenEvictionRunsMillis" value="10000"/>
        <!--  在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
        <property name="numTestsPerEvictionRun" value="10"/>
        <!-- 1000 * 60 * 30  连接在池中保持空闲而不被空闲连接回收器线程-->
        <property name="minEvictableIdleTimeMillis" value="10000"/>
	<property name="validationQuery" value="SELECT NOW() FROM DUAL"/>
    </bean>

下面的注释为转来的。很详细

tomcatde 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连接池配置参数说明 的相关文章

随机推荐

  • bin和elf文件(ARM) 五

    原文地址 http www iteye com topic 1121480 近段时间在研究Erlang核心特性的实现 也许过段时间会有个系列的总结 期待 今天看到有人写一个深入Hello World的文章 想起来读研的时候做的一个关于程序加
  • jquery 根据值设置radio选中,获取选择的值

    百度到了很多种 基本没几个能用的 是因为浏览器版本的问题 试了多次 找到一个可适应多版本IE的 其它浏览器为测试 不过应该可行 HTML
  • 【转】Spring/SpringBoot常用注解总结

    目录 0 前言 1 SpringBootApplication 2 Spring Bean 相关 3 处理常见的 HTTP 请求类型 4 前后端传值 5 读取配置信息 6 参数校验 7 全局处理 Controller 层异常 8 mybat
  • 【ML】机器学习中的随机森林算法

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • STL 全排列

    1 排列序数 Description 如果用a b c d这4个字母组成一个串 有4 24种 如果把它们排个序 每个串都对应一个序号 abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bacd 6 badc
  • Spring基础篇-JdbcTemplate

    传统jdbc开发 有很多模板化代码 而为了简化 将模板代码封装起来 就是用了AOP思想 开发者只需要管住数据的关键操作 但是 与MyBatis相比 在一对一映射 一对多映射 以及动态SQL等方法 还是不足 使用JdbcTemplate 需要
  • 蒙特卡罗算法 与 拉斯维加斯算法

    蒙特卡罗算法并不是一种算法的名称 而是对一类随机算法的特性的概括 那么 蒙特卡罗 是一种什么特性呢 我们知道 既然是随机算法 在采样不全时 通常不能保证找到最优解 只能说是尽量找 那么根据怎么个 尽量 法儿 我们我们把随机算法分成两类 蒙特
  • 数据卷与挂载目录

    前言 数据卷与挂载目录都是数据持久化存储的方式 一 卷和挂载目录有什么区别 卷 Docker Volume 是受控存储 是由 Docker 引擎进行管理维护的 因此使用卷 你可以不必处理 uid SELinux 等各种权限问题 Docker
  • 关于硬件工程师的真相:敢问路在何方? 

    关于硬件工程师的真相 敢问路在何方 硬件工程师 曾经有多少人希望从事的职业 在别人眼里好像能够从事硬件设计需要你了解很多东西 可以从事这个职业之后才逐渐发现 硬件工程师处在一种非常难受的困境当中 想来造成这种情况可能主要有多方面的原因 一个
  • 时间序列预测的常用20种方法优缺点对比深入分析

    百度百科 时间序列预测是指利用获得的数据按时间顺序排成序列 分析其变化方向和程度 从而对未来若干时期可能达到的水平进行推测 时间序列预测的基本思想 就是将时间序列作为一个随机变量的一个样本 用概率统计的方法 从而尽可能减少偶然因素的影响 当
  • latex论文写作问题集锦

    目录 latex冷门指令 实现对Appendix A的引用 修改错误公式后 File ended while scanning use of newl bel Edas 上传 fonts are embedded 概念性问题 theorem
  • CORE-ESP32C3

    目录 基础资料 探讨重点 参考博文 实现功能 硬件准备 软件版本 日志及soc下载工具 软件使用 接线示意图 IO11解锁教程可参考 功能1 基于墨水屏的日期显示 初始化 日期显示 功能2 WLAN连接示例 功能3 SNTP时间服务器的动态
  • 常见优化方法及慢查询

    exist 和 in select from table where exist 子查询 select from table where 字段 in 子查询 如果主查询的数据集大 则使用In 效率高 如果子查询的数据集大 则使用exist
  • 怎么查看mysql密码_怎么查看mysql密码

    MySQL数据库查看密码的方法如下 以系统管理员身份运行cmd 查看mysql是否已经启动 如果已经启动 就停止 net stop mysql 切换到MySQL安装路径下 D WAMP MySQL 5 6 36 bin 如果已经配了环境变量
  • 【蓝桥杯单片机】第十章 数码管(基础篇)

    第一节 硬件解读 蓝桥杯单片机的数码管一共有八位 如下图 这两部分完全是一摸一样的 公子就以左侧的 DS1 为例了 在图中我们不难发现 9到12脚显示的是com1到com4 这是什么呢 这些com代表了是哪一位数码管 比如com3就代表了第
  • Web学习笔记-React(组合Components)

    笔记内容转载自 AcWing 的 Web 应用课讲义 课程链接 AcWing Web 应用课 CONTENTS 1 创建父组件 2 从上往下传递数据 3 传递子节点 4 从下往上调用函数 5 兄弟组件间传递消息 6 无状态函数组件 7 组件
  • 常用的iPhone app快捷url链接

    版本一 系统 短信 sms app store itms apps 电话 tel 备忘录 mobilenotes 设置 prefs root SETTING E Mail MESSAGE 支付宝 支付宝 alipay 蚂蚁庄园 alipay
  • vue在有菜单的情况下,创建一个某页面内的菜单

    场景 本系统有一个整体的菜单 但是一个模块的需求是 需要在这个模块首页再加一个菜单 代码 在路由中加入一级菜单及所有的二级菜单 path xfj component gt import views xfj xfjIndex hidden t
  • Python while循环语句

    Python while循环语句 一 while使用说明 1 循环语句允许我们执行一个语句或语句组多次 程序员可以通过条件控制循环次数 1 猜数字游戏实例演示 1 猜数字游戏 当你猜的价格不对时 继续猜 2 当你猜对猜数字时 正常退出本次游
  • DBCP连接池配置参数说明