数据库连接池的组成

 

一、定义

        预先从数据库获取链接,保持可用的闲置状态,在应用需要使用时,通过连接池直接获取,减少与数据库交互的开销,使用完成后归还连接池管理,但不释放与数据库的物理链接。通过连接池的形式控制获取数据库链接的数量,设置最小连接数和最大连接数等参数,管控数据库链接的稳定性



    二、相关参数
        (1)数据源/用户/密码
        (2)最大连接数
            连接池管理获取的连接数上限,一般所有实例的链接总数不可超过数据库设置的连接数上限80%
        (3)最小连接数
            连接池初始化时预先加载的数据库资源,连接池必须保持的最小链接数量。在高峰阶段后连接池的链接数量逐一释放到最小连接数,正常情况下满足平峰期间到业务请求
        (4)最大使用次数
            每个连接都有使用次数记录,达到一定次数后,释放链接
        (5)最大使用时间
            每个连接在池中的存活时间,到了过期时间后,如果链接空闲,则释放链接
        (6)最小空闲数
            指连接池管理上,必须保证空闲的连接数,保证请求来的时候立刻有可用的链接直接使用
        (7)轮询检查时间间隔
            指连接池检查链接群的情况的时间间隔



    三、运行逻辑
        (1)初始化:根据相关参数进行初始化连接池,创建空闲链接队列,和所有链接队列,设置链接超时时间;创建最少链接放到空闲链接对垒和所有链接队列中;创建连接池的运行管理线程并启动;
        (2)创建链接
            涉及多线程同步处理,当前线程数使用AtomicInteger记录Count,通过jdbc建立物理链接,创建成功初始化链接的状态,使用次数,时间等属性,放入数据链接队列,放入空闲队列中
        (3)获取链接
            从空闲链接队列poll操作获得
                如果为空,判断是否池满,
                    若满则使用带阻塞超时时间的poll操作进入阻塞等待,超时则记录次数,超过次数则告警
                    若未满,则创建新链接
            检查链接可用性,若不可用则断开链接,新建一个链接
            设置链接的状态为使用中,记录使用次数加一,记录使用时间,



    四、成员变量
         (1)空闲队列
            使用BlockQueue作为存储,并发从队列中取链接或者放入链接时,如果队列满了支持堵塞等待,知道队列有空间可以继续存放。基于以上特性,获取链接时,相当于消费,创建链接时,相当于生产
        (2)总链接队列
            存放所有链接,当链接从空闲队列中取出使用后,总链接队列不会减少;链接使用后被释放,则从新放入空闲队列。
        (3)当前连接数
            使用AtomicInteger来存放链接个数,在创建链接或者释放物理资源时,可以进行并发处理,保证多线程安全



    五、运行管理线程
        取空闲队列一个链接
        链接不为空,检查是否达到调用次数或者过期时间,满足条件则断开链接,释放资源,从总链接队列中移除
        检查空闲队列的条数是否满足最小空闲队列,不满足则在不超出最大连接数的条件下创建新链接
        轮询总队列里的链接,检查使用状态的链接的使用时间,若使用时间超过限定,则告警长事务

总体思维导图如下

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值