首页> 中国专利> 一种获取数据库连接池中连接的方法和数据库连接池

一种获取数据库连接池中连接的方法和数据库连接池

摘要

本发明公开了一种获取数据库连接池中连接的方法和数据库连接池。本发明实施例提供的一种获取数据库连接池中连接的方法包括:在数据库连接池中设置连接池控制器、空闲连接池和已使用连接池;在初始化过程中,连接池控制器启用数据库的预定数量的可用连接,并将该可用连接放入空闲连接池中;当接收到调用端的连接获取请求时,连接池控制器判断空闲连接池中是否存在可用连接;当空闲连接池中存在可用连接时,连接池控制器根据连接获取请求从空闲连接池中提取可用连接;连接池控制器将提取到的可用连接放入已使用连接池中,并将该提取到的可用连接发送至调用端使用。

著录项

  • 公开/公告号CN104239365A

    专利类型发明专利

  • 公开/公告日2014-12-24

    原文格式PDF

  • 申请/专利权人 北京新媒传信科技有限公司;

    申请/专利号CN201310252758.X

  • 发明设计人 乔巍冉;

    申请日2013-06-24

  • 分类号G06F17/30(20060101);

  • 代理机构11323 北京市隆安律师事务所;

  • 代理人权鲜枝;齐辉

  • 地址 100089 北京市海淀区万泉庄路28号万柳新贵大厦A座6层602室

  • 入库时间 2023-12-17 04:44:31

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-09-04

    授权

    授权

  • 2015-01-14

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20130624

    实质审查的生效

  • 2014-12-24

    公开

    公开

说明书

技术领域

本发明涉及数据库应用技术领域,特别涉及一种获取数据库连接池中连接的方法和数据库连接池。

背景技术

随着数据库技术的发展,数据库在许多软件系统中经常用到,成为开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理,如没有及时回收数据库的游标(ResultSet)、状态(Statement)和连接(Connection)等资源,往往会直接导致系统的不稳定,这类不稳定因素,随着流量、用户的增加,会逐步显露,给整个系统造成影响。

针对上述数据库的连接资源的管理问题,现有方案中提出了数据库连接池的思想。然而,现有的数据库连接池至少具有如下缺陷:

当用户量较大,出现高并发的现象时,会导致数据库开关频率增加,对数据库造成压力,现有数据库连接池对高并发问题的处理效果不佳,并且,现有数据库连接池分配和释放连接的速度较慢,数据库连接池的工作效率较低。

发明内容

本发明提供了一种获取数据库连接池中连接的方法和数据库连接池,以解决现有方案中对高并发问题处理欠佳以及连接池工作效率较低的问题等。

为达到上述目的,本发明实施例采用了如下技术方案:

本发明一个实施例提供了一种获取数据库连接池中连接的方法,在数据库连接池中设置连接池控制器、空闲连接池和已使用连接池,该方法包括:

在初始化过程中,连接池控制器启用数据库的预定数量的可用连接,并将该可用连接放入空闲连接池中;

当接收到调用端的连接获取请求时,连接池控制器判断空闲连接池中是否存在可用连接;

当空闲连接池中存在可用连接时,连接池控制器根据连接获取请求从空闲连接池中提取可用连接;

连接池控制器将提取到的可用连接放入已使用连接池中,并将该提取到的可用连接发送至调用端使用;

其中,放入空闲连接池中连接的状态设置为空闲,放入已使用连接池中连接的状态设置为已使用。

本发明又一个实施例提供了一种数据库连接池,该数据库连接池包括连接池控制器、空闲连接池和已使用连接池,

空闲连接池,用于放置数据库的可用连接,并将放入空闲连接池中连接的状态设置为空闲;

已使用连接池,用于放置数据库的已使用连接,并将放入已使用连接池中连接的状态设置为已使用;

连接池控制器,用于在初始化过程中,启用数据库的预定数量的可用连接,并将该可用连接放入空闲连接池中;当接收到调用端的连接获取请求时,判断空闲连接池中是否存在可用连接;当空闲连接池中存在可用连接时,根据连接获取请求从空闲连接池中提取可用连接;将提取到的可用连接放入已使用连接池中,并将该提取到的可用连接发送至调用端使用。

由上所述,本发明实施例提供了一种新型的数据库连接池,通过控制该数据库连接池初始化时启用的可用连接的数量,以及,当判断空闲连接池中存在可用连接时再为调用端分配连接的技术手段,控制了数据库所处理的连接的最大数量,解决了出现高并发时导致数据库频繁开关、压力较大的问题,提高了数据库连接池应对高并发情况的性能。

并且,本发明实施例通过设置空闲连接池和已使用连接池,极大便利了可用连接的提取和回收操作,加快了连接分配与释放的速度,从而提高了数据库连接池的工作效率。

附图说明

图1为本发明一个实施例提供的一种数据库连接池的结构示意图;

图2为本发明又一个实施例提供的一种获取数据库连接池中连接的方法流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

本方案提供了一套可复用的、在大并发情况下可迅速准确的提供给调用端有效、安全的数据库连接的数据库连接池方案。

本发明一个实施例提供了一种新型的数据库连接池100。该数据库连接池100包括连接池控制器113、空闲连接池111(可表示为freeConnection)和已使用连接池112(可表示为inUseConnection)。下面对这些器件进行具体说明。

空闲连接池111用于放置数据库的可用连接,并将放入空闲连接池中连接的状态设置为空闲;已使用连接池112用于放置数据库的已使用连接,并将放入已使用连接池中连接的状态设置为已使用。采用空闲连接池111和已使用连接池112可以对放入其中的连接的状态进行控制和记录。

数据库连接池对连接的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。为实现这一目的,本实施例对连接的管理使用两个池子,即空闲连接池111和已使用连接池112,一个存放未被使用的连接,一个存放使用中的连接,即本实施例采用对空闲连接和已使用连接分成两部分分别进行处理的方式,从而便于连接的提取和回收。

进一步的,本实施例还时时监控池中的连接是否正常,及时对连接进行回收,以及保证连接的有效性,以降低并发问题带来的影响。每个池子分别有一个线程监控,根据实际需求可以同时对空闲连接池111和已使用连接池112进行监控,也可以仅对其中的一个池子进行监控。如,连接池控制器113利用第一线程采用同步(synchronized)方式对已使用连接池中的连接进行监测;当监测到调用端使用连接的时间超过为该调用端设置的连接有效时间时,将该连接从调用端收回,放入空闲连接池中,这种监控处理,当存放在已使用连接池112的连接超过配置的超时时间(连接有效时间)时,自动释放连接返回空闲连接池111。例如,当为调用端1设置的连接有效时间为10s时,若调用端1对已使用连接池112中某一连接的使用时间超过了10s,则即使调用端1没有使用完毕该连接,也要将该连接回收至空闲连接池111中。

连接池控制器113还用于利用第二线程采用同步方式对空闲连接池中的连接进行监测;当监测到连接不可用时,关闭该不可用的连接并启用新的可用连接,将该新启用的可用连接放入空闲连接池中。这种监控处理,如果由于发生物理破坏或其他情况导致空闲连接池111中的连接不可用时,则关闭连接并重新创建连接。

上述监控方式采用了同步方式,表示第一线程和/或第二线程处于一种锁住状态,当第一线程和/或第二线程使用Java平台中的资源时不允许其他线程使用该资源,其他线程处于等待状态。

连接池控制器113可以对数据库连接池进行配置和维护,例如,配置的参数可以包括连接池初始化大小(初始化时启用的可用连接的数量)、连接池中允许放置的连接的数量,上述的连接有效时间、连接获取请求的等待时间阈值以及数据库连接的信息等等,这些配置的参数可以设置在配置文件中,配置参数的具体数值可以根据服务需求进行修改,实现对数据库连接池的灵活控制。例如,连接池初始化大小和连接池中允许放置的连接的数量可以根据数据库连接池的内存容量和数据库自身支持的连接数量的上限数值来设置。当数据库连接池的内存容量较大和/或数据库自身支持的连接数量的上限数值较大时,连接池初始化大小和连接池中允许放置的连接的数量可以选取较大的数值;当数据库连接池的内存容量较小和/或数据库自身支持的连接数量的上限数值较小时,连接池初始化大小和连接池中允许放置的连接的数量需要选取较小的数值。

进一步的,本实施例除了利用空闲连接池111和已使用连接池112对放入其中的连接的状态进行控制之外,还利用空闲连接池111和已使用连接池112来控制对调用端开放的连接的数量,以控制并发问题对系统造成的影响。例如,当需要向空闲连接池中放入新连接时,连接池控制器113判断新连接放入后空闲连接池中连接的总数量是否大于第一数量阈值,若是,禁止该新连接放入空闲连接池中,若否,允许该新连接放入空闲连接池中;当需要向已使用连接池中放入新连接时,连接池控制器113判断新连接放入后已使用连接池中连接的总数量是否大于第二数量阈值,若是,禁止该新连接放入已使用连接池中,若否,允许该新连接放入已使用连接池中。

由上,本实施例通过初始化时启用的连接的数量,空闲连接池和已使用连接池允许的连接的数量阈值,以及连接的分配和释放逻辑等,限制了连接池容纳的最大连接数来防止系统无尽地与数据库连接,更为重要的是可以通过连接池的管理机制监视数据库的连接的数量以及使用情况,从而为系统开发、测试及性能调整提供参考依据。

本实施例自行提供的新的数据库连接池,配置简单,方便配置,且代码具有可控性,易于排查和解决问题。

下面以一次分配连接的场景为例说明本实施例的技术方案,主要包括如下操作:

1)、在数据库连接池的初始化过程中,连接池控制器113启用数据库的预定数量(如50个)的可用连接,并将该可用连接放入所设置的空闲连接池111中。

2)、当调用端需要创建数据库的连接时,连接池控制器113接收到调用端的连接获取请求(request)。

进一步的,对于调用端的数量过大,出现高并发的问题时,本实施例还利用连接池控制器113将接收到的多个连接获取请求依次加入等待队列中;对等待队列中的每个连接获取请求,判断该连接获取请求的等待时间是否超过预设的等待时间阈值,若未超过等待时间阈值,则根据所述连接获取请求从空闲连接池中提取可用连接,若超过等待时间阈值,不再对该连接获取请求进行响应。通过利用等待队列和等待时间阈值对连接获取请求进行控制,以进一步降低并发现象对系统的影响。

3)、连接池控制器113判断空闲连接池111中是否存在可用连接。

连接池控制器113需要确认空闲连接池111中是否存在有效的空闲连接。

4)、当空闲连接池111中存在可用连接时,连接池控制器113根据连接获取请求从空闲连接池中提取可用连接。

在此,当空闲连接池111中不存在可用连接时,连接池控制器113启动新的可用连接,将该新的可用连接放入空闲连接池111中。需要说明的是,在启动上述新的可用连接时,连接池控制器113需要判断将该新的可用连接加入空闲连接池111后,空闲连接池111中容纳的连接的总数量不会超过配置文件中指示的空闲连接池中允许放置的连接的数量(如第一数量阈值)。

在执行获取操作时,连接池控制器113根据连接获取请求,利用所设置的JAR文件包中的getConnection(连接获取)方法从空闲连接池中获得CinConnection对象(连接类对象),由该连接类对象得到提取的可用连接,该获取到的CinConnection对象即为从空闲连接池111中提取到的可用连接。

5)、将提取到的可用连接放入所设置的已使用连接池112中,并将该提取到的可用连接发送至调用端使用。

当发送至调用端的连接使用完毕后,连接池控制器113将该连接回收放入空闲连接池111中,空闲连接池111会将回收到的连接的状态设置为空闲。可以理解,在进行连接的回收时,也需要满足空闲连接池111中容纳的连接的总数量不会超过配置文件中指示的空闲连接池中允许放置的连接的数量的条件。

本发明又一个实施例提供了一种获取数据库连接池中连接的方法,在该数据库连接池中设置有连接池控制器、空闲连接池和已使用连接池,参见图2,该方法包括:

S200:在初始化过程中,连接池控制器启用数据库的预定数量的可用连接,并将该可用连接放入空闲连接池中;

S202:当接收到调用端的连接获取请求时,连接池控制器判断空闲连接池中是否存在可用连接;

S204:当空闲连接池中存在可用连接时,连接池控制器根据所述连接获取请求从空闲连接池中提取可用连接。

进一步的,本实施例中当判断出空闲连接池中不存在可用连接时,在上述根据所述连接获取请求从空闲连接池中提取可用连接之前,上述方法还包括:连接池控制器启动新的可用连接,将该新的可用连接放入空闲连接池中。

需要说明的是,在启动上述新的可用连接时,需要判断将该新的可用连接加入空闲连接池后,空闲连接池中容纳的连接的总数量不会超过配置文件中指示的空闲连接池中允许放置的连接的数量(如第一数量阈值)。

S206:连接池控制器将提取到的可用连接放入已使用连接池中,并将该提取到的可用连接发送至调用端使用;

其中,放入所述空闲连接池中连接的状态设置为空闲,放入所述已使用连接池中连接的状态设置为已使用。

在图2所示实施例的基础上,上述方法还包括:当需要向空闲连接池中放入新连接时,连接池控制器判断新连接放入后空闲连接池中连接的总数量是否大于第一数量阈值,若是,禁止该新连接放入空闲连接池中,若否,允许该新连接放入空闲连接池中;当需要向已使用连接池中放入新连接时,连接池控制器判断新连接放入后已使用连接池中连接的总数量是否大于第二数量阈值,若是,禁止该新连接放入已使用连接池中,若否,允许该新连接放入已使用连接池中。

其中,在步骤S206之后,上述方法还包括:当发送至调用端的连接使用完毕后,连接池控制器将该连接回收放入空闲连接池中。

其中,步骤S204中根据所述连接获取请求从空闲连接池中提取可用连接包括:

连接池控制器将接收到的多个连接获取请求依次加入等待队列中;对该等待队列中的每个连接获取请求,判断该连接获取请求的等待时间是否超过预设的等待时间阈值,若未超过等待时间阈值,则根据所述连接获取请求从空闲连接池中提取可用连接,若超过等待时间阈值,不再对该连接获取请求进行响应。具体的,该处理可以包括:根据所述连接获取请求,利用所设置的JAR文件包中的getConnection(连接获取)方法从空闲连接池中获得CinConnection对象(连接类对象),由该连接类对象得到提取的可用连接。

上述初始化时启用的可用连接的预定数量、第一数量阈值、第二数量阈值、等待时间阈值等参数,可以从维护的配置文件中获取得到,这些参数的具体数值可以根据实际场景(如数据库所支持的连接的最大数量、数据库连接池的内存容量等)进行调整。

其中,本实施例还提供了一种监控管理机制,上述方法还包括:

连接池控制器利用第一线程采用同步方式对已使用连接池中的连接进行监测;当监测到调用端使用连接的时间超过为该调用端设置的连接有效时间时,将该连接从调用端收回,放入空闲连接池中;和/或

连接池控制器利用第二线程采用同步方式对空闲连接池中的连接进行监测;当监测到连接不可用时,关闭该不可用的连接并启用新的可用连接,将该新启用的可用连接放入空闲连接池中。

本方法实施例中各步骤的具体执行方式可以参见本发明的装置实施例,在此不再赘述。

本发明实施例针对高并发现象、连接池的分配与释放、连接池的配置与维护等问题,提供了一种新型的数据库连接池,实现了数据库获取连接的高效性,并有严格的监控机制,可保障数据库的重复使用和准确性,减少了对数据库的压力;并且配置方便,对数据库开发人员有很大帮助。较现有方案在量级达到在百万级数据时处理速度有明显提高。

由上所述,本发明实施例通过控制数据库连接池初始化时启用的可用连接的数量,以及,当判断空闲连接池中存在可用连接时再为调用端分配连接的技术手段,控制了数据库所处理的连接的最大数量,解决了出现高并发时导致数据库频繁开关、压力较大的问题,提高了数据库连接池应对高并发情况的性能。

并且,本发明实施例通过设置空闲连接池和已使用连接池,极大便利了可用连接的提取和回收操作,加快了连接分配与释放的速度,从而提高了数据库连接池的工作效率。

为了便于清楚描述本发明实施例的技术方案,在发明的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号