广告
返回顶部
首页 > 资讯 > 数据库 >DBCP连接池介绍
  • 188
分享到

DBCP连接池介绍

2024-04-02 19:04:59 188人浏览 薄情痞子
摘要

# 初始化连接:连接池启动时创建的初始化连接数量 initialSize=1 # 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建

# 初始化连接:连接池启动时创建的初始化连接数量
initialSize=1
# 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建
minIdle=1
# 最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制
maxIdle=2
# 最大活动连接:连接池在同一时间能够分配的最大活动连接的数量,如果设置为非正数则表示不限制
maxActive=3
# 借出连接时不要测试,否则很影响性能  
testOnBorrow=false
# 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.  
testWhileIdle=true
# 每X秒运行一次空闲连接回收器
timeBetweenEvictionRunsMillis=30000
# 在校验线程完成校验时会移除被遗漏的链接
removeAbandonedOnMaintenance=true
# 查询校验
validationQuery=SELECT 1

-----------------------------

DBCP连接池的自我检测

-----------------------------

默认配置的DBCP连接池,是不对池中的连接做测试的,有时连接已断开了,但DBCP连接池不知道,还以为连接是好的呢。

应用从池中取出这样的连接访问数据库一定会报错。这也是好多人不喜欢DBCP的原因。

 

问题例一:

Mysql8小时问题,mysql服务器默认连接的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。

但是DBCP连接池并不知道连接已经断开了,如果程序正巧使用到这个已经断开的连接,程序就会报错误。

 

问题例二:

    以前还使用Sybase数据库,由于某种原因,数据库死了后重启、或断网后恢复。

    等了约10分钟后,DBCP连接池中的连接还都是不能使用的(断开的),访问数据应用一直报错,最后只能重启Tomcat问题才解决 。

 

解决方案:

    方案1、定时对连接做测试,测试失败就关闭连接。

    方案2、控制连接的空闲时间达到N分钟,就关闭连接,(然后可再新建连接)。

    以上两个方案使用任意一个就可以解决以述两类问题。如果只使用方案2,建议 N <= 5分钟。连接断开后最多5分钟后可恢复。

    也可混合使用两个方案,建议 N = 30分钟。

    

    下面就是DBCP连接池,同时使用了以上两个方案的配置配置

    validationQuery = "SELECT 1"  验证连接是否可用,使用的SQL语句

    testWhileIdle = "true"      指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.

    testOnBorrow = "false"   借出连接时不要测试,否则很影响性能



-----------------------------

DBCP连接池配置参数注意事项   

-----------------------------

maxIdle值与maxActive值应配置的接近。

因为,当连接数超过maxIdle值后,刚刚使用完的连接(刚刚空闲下来)会立即被销毁。而不是我想要的空闲M秒后再销毁起一个缓冲作用。这一点DBCP做的可能与你想像的不一样。

若maxIdle应与maxActive相差较大,在高负载的系统中会导致频繁的创建、销毁连接,连接数在maxIdle与maxActive间快速频繁波动,这不是我想要的。

高负载的系统的maxIdle值可以设置为与maxActive相同或设置为-1(-1表示不限制),让连接数量在minIdle与maxIdle间缓冲慢速波动。

 

timeBetweenEvictionRunsMillis建议设置值

initialSize="5",会在tomcat一启动时,创建5条连接,效果很理想。

但同时我们还配置了minIdle="10",也就是说,最少要保持10条连接,那现在只有5条连接,哪什么时候再创建少的5条连接呢?

1、等业务压力上来了, DBCP就会创建新的连接。

2、配置timeBetweenEvictionRunsMillis=“时间”,DBCP会启用独立的工作线程定时检查,补上少的5条连接。销毁多余的连接也是同理。


------------------------------

连接销毁的逻辑

------------------------------

DBCP的连接数会在  0 - minIdle - maxIdle - maxActive  之间变化。变化的逻辑描述如下:

 

默认未配置initialSize(默认值是0)和timeBetweenEvictionRunsMillis参数时,刚启动tomcat时,连接数是0。当应用有一个并发访问数据库时DBCP创建一个连接。

目前连接数量还未达到minIdle,但DBCP也不自动创建新连接已使数量达到minIdle数量(没有一个独立的工作线程来检查和创建)。

随着应用并发访问数据库的增多,连接数也增多,但都与minIdle值无关,很快minIdle被超越,minIdle值一点用都没有。

直到连接的数量达到maxIdle值,这时的连接都是只增不减的。 再继续发展,连接数再增多并超过maxIdle时,使用完的连接(刚刚空闲下来的)会立即关闭,总体连接的数量稳定在maxIdle但不会超过maxIdle。

但活动连接(在使用中的连接)可能数量上瞬间超过maxIdle,但永远不会超过maxActive。

这时如果应用业务压力小了,访问数据库的并发少了,连接数也不会减少(没有一个独立的线程来检查和销毁),将保持在maxIdle的数量。

默认未配置initialSize(默认值是0),但配置了timeBetweenEvictionRunsMillis=“30000”(30秒)参数时,刚启动tomcat时,连接数是0。马上应用有一个并发访问数据库时DBCP创建一个连接。

目前连接数量还未达到minIdle,每30秒DBCP的工作线程检查连接数是否少于minIdle数量,若少于就创建新连接直到达到minIdle数量。

随着应用并发访问数据库的增多,连接数也增多,直到达到maxIdle值。这期间每30秒DBCP的工作线程检查连接是否空闲了30分钟,若是就销毁。但此时是业务的高峰期,是不会有长达30分钟的空闲连接的,工作线程查了也是白查,但它在工作。到这里连接数量一直是呈现增长的趋势。

当连接数再增多超过maxIdle时,使用完的连接(刚刚空闲下来)会立即关闭,总体连接的数量稳定在maxIdle。停止了增长的趋势。但活动连接(在使用中的连接)可能数量上瞬间超过maxIdle,但永远不会超过maxActive。

这时如果应用业务压力小了,访问数据库的并发少了,每30秒DBCP的工作线程检查连接(默认每次查3条)是否空闲达到30分钟(这是默认值),若连接空闲达到30分钟,就销毁连接。这时连接数减少了,呈下降趋势,将从maxIdle走向minIdle。当小于minIdle值时,则DBCP创建新连接已使数量稳定在minIdle,并进行着新老更替。

配置initialSize=“10”时,tomcat一启动就创建10条连接。其它同上。

minIdle要与timeBetweenEvictionRunsMillis配合使用才有用,单独使用minIdle不会起作用。


您可能感兴趣的文档:

--结束END--

本文标题: DBCP连接池介绍

本文链接: https://www.lsjlt.com/news/41090.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • DBCP连接池介绍
    # 初始化连接:连接池启动时创建的初始化连接数量 initialSize=1 # 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建 ...
    99+
    2022-10-18
  • Java数据库连接池DBCP的介绍
    目录1、配置参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、在 SpringBoot 中使用2.2.1、引入依赖2.2.2、单数据源2.2.3、多数据源D...
    99+
    2022-11-12
  • Hibernate 中如何使用dbcp连接池
    Hibernate 中如何使用dbcp连接池,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Hibernate dbcp连接池在Hibernate3.0中,已经不...
    99+
    2023-06-17
  • Java数据库连接池c3p0介绍
    目录1、配置参数1.1、基础配置1.2、连接池大小1.3、连接池大小和连接存活时间1.4、连接测试1.5、预编译池1.6、数据库中断的恢复1.7、自定义连接生命周期管理1.8、处理未...
    99+
    2022-11-12
  • Java 数据库连接池DBPool 介绍
    目录1、配置参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、在 SpringBoot 中使用2.1.1、引入依赖2.1.2、单数据源2.1.3、多数据源前...
    99+
    2022-11-12
  • Java数据库连接池Tomcat介绍
    目录1、配置参数1.1、基础配置1.2、系统属性1.3、一般参数1.4、增强参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、作为资源配置在 Tomcat ...
    99+
    2022-11-12
  • 数据库连接池技术中dbcp、c3p0、jndi
    不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的。在以往的应用中,数据源一般是 Web应用服务器提供的。在Spring中,你不但可以通过JNDI获取应用服务...
    99+
    2022-10-18
  • Java 数据库连接池Druid 的介绍
    目录1、配置参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、在 SpringBoot 中使用2.1.1、引入依赖2.1.2、单数据源2.1.3、多数据源2...
    99+
    2022-11-12
  • tomcat自带连接池dbcp配置以及优化说明
    一个网站每天大概有20万的访问量,使用的tomcat自带dbcp连接池,一般网站访问很好,速度也很快,但是过一段时间后,总是报timeout waiting for idle object的异常信息,最后查了apache tomcat的官方...
    99+
    2023-06-02
  • JavaJDBCAPI介绍与实现数据库连接池流程
    目录JDBC API详解DriverManagerConnection获取执行对象事务管理Statement概述代码演示ResultSet概述代码演示PreparedStatemen...
    99+
    2022-12-08
    Java JDBC API Java JDBC数据库连接池
  • 数据库连接池dbcp的原理及配置是怎样的
    这篇文章将为大家详细讲解有关数据库连接池dbcp的原理及配置是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 简介DBCP(DataBa...
    99+
    2022-10-19
  • 举例介绍mysql外连接
    下文我给大家简单讲讲关于举例介绍mysql外连接,大家之前了解过相关类似主题内容吗?感兴趣的话就一起来看看这篇文章吧,相信看完举例介绍mysql外连接对大家多少有点帮助吧。#案例:查询编号>3的女神的...
    99+
    2022-10-18
  • Java数据库连接池之DBCP浅析_动力节点Java学院整理
    一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体...
    99+
    2023-05-31
    java 数据库连接池 dbcp
  • DataSource与数据库连接池简介(JDBC简介)
    目录起源为何放弃DriverManager连接池数据源实现核心架构DataSourceAPI小结应用数据库连接池示例总结DataSource是作为DriverManager的替代品而...
    99+
    2022-11-13
    数据库连接池Data Source JDBC数据库连接池Data Source
  • MySQL连接控制插件介绍
    目录1.连接控制(connection_control)插件介绍1.1 动态安装 connection_control 插件1.2  验证插件状态1.3 安装完成后 可以看...
    99+
    2022-11-12
  • MySQL - 安装、连接、简单介绍
    1、安装 MySQL8.0 安装MySQL 8.0的步骤,以 Windows 为例: 1.1 下载MySQL Installer: 需要从MySQL官方网站下载MySQL Installer。在下载页面中,选择适用于Windows的MySQ...
    99+
    2023-08-16
    mysql 数据库
  • windows10怎么连接wifiwindows10连接wifi方式详细介绍
    windows10怎么连接wifi对比许多用户较为在乎,第一次应用win10的用户针对连接wifi这个问题是非常朦胧的,因而不知怎样连接wifi,实际上windows10连接wifi全过程不会太难,只不过是用户必须了解wifi密码才可以连接...
    99+
    2023-07-10
  • pythonflasksqlalchemy连接数据库流程介绍
    1、安装flask_sqlalchemy和pymysql包 pip install flask-sqlalchemy pip install pymysql 2、进行配置 使用Fla...
    99+
    2022-11-11
  • ASP.NETCore中的对象池介绍
    asp.net core中通过扩展库的方式提供给了一个标准的对象池ObjectPool,定义在Microsoft.Extensions.ObjectPool.dll 程序集中。它本身...
    99+
    2022-11-13
  • Node连接mysql数据库方法介绍
    使用Node做Web开发,基本上都是使用NoSQL数据库,最频繁的就是使用MongoDB了,自己做了一些简单的Web开发,为了降低学习门槛,一直使用MySQL来做数据库。这里简单介绍一下连接MySQL数据库...
    99+
    2022-06-04
    数据库 方法 Node
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作