数据库连接池的控制方法

文档序号:6519895阅读:349来源:国知局
数据库连接池的控制方法
【专利摘要】本发明提供一种数据库连接池的控制方法,包括:规范化线程优先级;判断当前连接池是否为空,如果连接池不为空,取出第一个数据连接,设置当前状态为忙,返回该数据连接;如果连接池为空,判断当前外部程序使用中未归还的数据连接个数是否已经达到了连接池内最大连接个数,如果未达到,增加数据连接,并加入当前数据库连接池,返回数据库连接池的第一个数据连接;如果当前外部程序使用中未归还的数据连接个数达到连接池内最大连接个数,设置当前线程的优先级,获取当前时间作为第一时间,循环判断当前连接池是否为空,数据库连接池进入等待状态。在高并发、多数据源环境下,有效提高了数据访问性能。
【专利说明】数据库连接池的控制方法
【技术领域】
[0001]本发明涉及计算机数据库领域,尤其涉及一种数据库连接池的控制方法。
【背景技术】
[0002]信息化应用程序一般都要频繁地访问数据库,典型的一个业务场景如:从数据库读取业务数据,组装成业务信息展现给用户,同时把用户对业务信息的修改内容保存到数据库。
[0003]对于一个Web应用系统,应用服务器一般为每一个客户端(即一个会话,session)访问开辟一个独立线程,以提高应用系统性能。此时,如果数据库访问采用单线程的建立、使用、关闭,就会严重阻塞多线程执行效率,并且,一个数据库访问的建立,会消耗较大的系统资源和时间,如果频繁地建立和关闭数据库访问,会极大降低系统性能。
[0004]怎样提升应用系统数据访问性能,数据库连接池就是针对这个问题提出来的。
[0005]一般地,当数据库连接池建立时,初始化几个数据连接,等待应用程序调用。应用程序调用一次,就取走一个数据连接,使用完了就归还数据连接。当连接池内的数据连接取完了,就增加新数据连接,直到创建连接达到最大允许连接个数。若再取连接时,等待一段时间,若还没有空闲连接就会抛出异常。这就是一般数据库连接池的工作原理,采用数据库连接池技术,能极大提升应用系统的数据访问性能。
[0006]但是现有技术中缺少在高并发、多数据源环境下对于数据库连接池的控制方法。
【发明内容】

[0007]本发明要解决的技术问题是,针对现有技术的不足,提供一种数据库连接池的控制方法,在高并发、多数据源环境下,有效提高了数据访问性能。
[0008]根据本发明一个方面,提供一种数据库连接池的控制方法,用于对外提供数据连接,包括:
[0009]根据预设的优先级范围,规范化传入的线程优先级参数,得到规范化参数优先级;
[0010]判断当前连接池是否为空,如果连接池不为空,取出第一个数据连接,设置当前状态为忙,返回该数据连接;
[0011]如果连接池为空,判断当前外部程序使用中未归还的数据连接个数是否已经达到了连接池内最大连接个数,如果未达到,增加数据连接,并加入当前数据库连接池,返回数据库连接池的第一个数据连接;
[0012]如果当前外部程序使用中未归还的数据连接个数达到连接池内最大连接个数,设置当前线程的优先级为规范化参数优先级,获取当前时间作为第一时间,循环判断当前连接池是否为空,数据库连接池进入等待状态;
[0013]循环判断当前连接池是否为空包括:获取当前时间作为第二时间,如果第二时间大于所述第一时间加上最大等待时间,则把数据连接超时信息写入日志,并返回空值;如果第二时间小于第一时间加上最大等待时间,数据库连接池继续等待;如果连接池不为空,即有新释放的数据连接时,取出第一个数据连接,设置数据连接状态为忙,并返回该数据连接。
[0014]可选的,其中,增加数据连接包括:
[0015]根据连接池扩展时每次增加数据连接个数和当前连接池可增加的数据连接个数进行对比,取其中的最小值作为要增加的数据连接数。
[0016]可选的,所述的数据库连接池的控制方法还包括:数据库连接池定期检查数据库连接是否有效,如果无效,会通知连接池清理数据连接。
[0017]可选的,所述的数据库连接池的控制方法还包括:数据库连接池定期检查数据库连接池大小,如果连接池为空,同时正在使用的数据连接个数小于连接池最小数据连接个数,则连接池加大数据连接到连接池最小连接个数。
[0018]可选的,所述的数据库连接池的控制方法还包括:数据库连接池定期检查数据库连接配置文件最后修改时间,如果最后修改时间在当前时间减去数据库检查时间范围内,则数据库配置文件已被修改,调用数据库连接池工厂刷新数据库连接池配置。
[0019]可选的,所述的数据库连接池的控制方法还包括:数据库连接池循环数据库连接池内的数据连接,如果数据连接空闲,且空闲时间大于最大空闲时间,则关闭该数据连接;
[0020]其中,关闭数据连接包括:将该数据库连接归还到数据库连接池,以便下回外部程序获取数据连接时能再次取出该连接。
[0021]根据本发明另一个方面,提供一种数据库连接池的控制方法,用于对内进行任务调度,包括:
[0022]判断配置文件是否已经修改;
[0023]如果数据库配置文件有修改,调用数据库连接池工厂,刷新当前数据库连接池配置信息,并终止后续任务调度;
[0024]如果数据库配置文件没有修改,则判断当前数据库连接池内的数据连接个数是否大于O ;如果大于0,则读取第一个数据连接,并测试该数据连接是否有效;如果测试数据连接无效,则清除当前连接池内的所有数据连接,重新初始化数据连接池并返回;如果测试数据连接有效,则遍历当前数据库连接池内的所有数据连接,判断每一个数据连接是否超过最大空闲时间,如果不超过则取出下一个数据连接,如果超过最大空闲时间则从数据库层释放该数据连接;
[0025]如果连接池内数据连接个数为0,则判断当前外部程序使用的数据连接个数是否已经到达连接池内最小数据连接数,如果未达到连接池内最小数据连接数,则增加数据连接个数到达连接池内最小数据连接数,并加入当前数据库连接池后返回。
[0026]可选的,其中,测试数据连接是否有效方法包括:根据当前数据连接的数据库类型,采用合适的sql语句进行测试。
[0027]可选的,其中,判断配置文件是否已经修改包括:获取当前时间和数据库配置文件的最后修改时间,如果配置文件的最后修改时间大于当前时间减去数据库检查周期,表示已修改。
[0028]可选的,其中,数据库配置文件包括:数据源名称、数据库驱动类名、数据库访问路径、连接池内最小数据连接个数、连接池内最大数据连接个数、数据库检查周期。[0029]本发明公开是实施例的优点包括:1)在多线程环境下连接繁忙时,即达到连接池上限且无可用连接,能根据调用的优先级和等待时间智能获取新释放的连接,即优先级越高、等待时间越长,越先获取到即将释放的数据连接,并能自动丢弃等待时间超过预先设置的最大等待时间的数据连接请求。2)能自动释放连接池中空闲时间超过预先设置的最大空闲时间的空闲数据库连接,起到降低系统空闲时的数据库和系统的资源占用。3)能自动检测到连接池中的数据库当前连接状态,如数据库正常、数据库关闭、网络不通等,并能在故障恢复后,立即恢复正常连接。3)能在系统运行时自动适应数据库配置文件的修改,而不用停止应用,这非常适合系统正式上线运行时,对现场数据库连接性能调优。4)支持多数据库、多数据源的数据库连接池的智能管理,每一个数据源就是一个数据库连接池,一个数据库连接池可以管理多个数据库连接。使用本发明,解决了并发多线程、多数据源环境下的数据库连接池的智能化管理,极大地提升了应用系统的数据库访问性能。
【专利附图】

【附图说明】
[0030]图1是根据本发明一个实施例提供的数据库连接池工厂类、数据库连接池类、数据库连接类的关系,以及它们与数据库配置文件的关系示意图;
[0031]图2是根据本发明一个实施例提供的数据库连接池的连接获取方法流程图;
[0032]图3是根据本发明一个实施例提供的数据库连接池的任务调度方法流程图。
【具体实施方式】
[0033]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。其他实施方案可以包括结构的、逻辑的、电气的、过程的,实施例仅代表可能的变化。除非明确要求,否则单独的组件和功能是可选的,并且操作的顺序可以变化。在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。一些实施方案的部分和特征可以被包括在或替换其他实施方案的部分和特征。本发明的实施方案的范围包括权利要求书的整个范围,以及权利要求书的所有可获得的等同物。
[0034]定义
[0035]根据本发明一个实施例,数据库配置文件是一个有固定名称(例如datasource.properties)和相对路径(例如放在源代码的根目录)的属性文件,采用键值对的形式列出每一个属性和属性值。
[0036]如表I所示,属性内容可以包括:数据源名称、数据库驱动类名、数据库访问路径、
[0037]用户名(可用MD5加密)、用户密码(可用MD5加密)、
[0038]连接池内最小数据连接个数(创建连接池时默认创建的数据连接个数,例如1-10)、
[0039]连接池内最大数据连接个数(能创建的最大在线数据连接个数,例如25-250)、
[0040]连接池扩展时每次增加数据连接个数(例如1-10)、
[0041]最大等待时间(连接繁忙时,等待数据连接超过该时间就会返回空值,例如1000-5000 毫秒)、
[0042]最大空闲时间(一个数据连接的空闲时间超过该值就会释放数据连接,例如60-120 分钟)、
[0043]数据库检查周期(数据库连接池的调度周期,即多长时间检查一次数据库连接并对连接池进行管理,例如1000-10000毫秒)。
[0044]表1
[0045]
【权利要求】
1.一种数据库连接池的控制方法,用于对外提供数据连接,包括: 根据预设的优先级范围,规范化传入的线程优先级参数,得到规范化参数优先级; 判断当前连接池是否为空,如果连接池不为空,取出第一个数据连接,设置当前状态为忙,返回该数据连接; 如果连接池为空,判断当前外部程序使用中未归还的数据连接个数是否已经达到了连接池内最大连接个数,如果未达到,增加数据连接,并加入当前数据库连接池,返回数据库连接池的第一个数据连接; 如果当前外部程序使用中未归还的数据连接个数达到连接池内最大连接个数,设置当前线程的优先级为规范化参数优先级,获取当前时间作为第一时间,循环判断当前连接池是否为空,数据库连接池进入等待状态; 循环判断当前连接池是否为空包括:获取当前时间作为第二时间,如果第二时间大于所述第一时间加上最大等待时间,则把数据连接超时信息写入日志,并返回空值;如果第二时间小于第一时间加上最大等待时间,数据库连接池继续等待;如果连接池不为空,即有新释放的数据连接时,取出第一个数据连接,设置数据连接状态为忙,并返回该数据连接。
2.根据权利要求1所述的数据库连接池的控制方法,其中,增加数据连接包括: 根据连接池扩展时每次增加数据连接个数和当前连接池可增加的数据连接个数进行对比,取其中的最小值作为要增加的数据连接数。
3.根据权利要求1所述的数据库连接池的控制方法,还包括:数据库连接池定期检查数据库连接是否有效,如果无效,会通知连接池清理数据连接。
4.根据权利要求1所述的数据库连接池的控制方法,还包括:数据库连接池定期检查数据库连接池大小,如果连接池为空,同时正在使用的数据连接个数小于连接池最小数据连接个数,则连接池加大数据连接到连接池最小连接个数。
5.根据权利要求1所述的数据库连接池的控制方法,还包括:数据库连接池定期检查数据库连接配置文件最后修改时间,如果最后修改时间在当前时间减去数据库检查时间范围内,则数据库配置文件已被修改,调用数据库连接池工厂刷新数据库连接池配置。
6.根据权利要求1所述的数据库连接池的控制方法,还包括:数据库连接池循环数据库连接池内的数据连接,如果数据连接空闲,且空闲时间大于最大空闲时间,则关闭该数据连接; 其中,关闭数据连接包括:将该数据库连接归还到数据库连接池,以便下回外部程序获取数据连接时能再次取出该连接。
7.一种数据库连接池的控制方法,用于对内进行任务调度,包括: 判断配置文件是否已经修改; 如果数据库配置文件有修改,调用数据库连接池工厂,刷新当前数据库连接池配置信息,并终止后续任务调度; 如果数据库配置文件没有修改,则判断当前数据库连接池内的数据连接个数是否大于O;如果大于O,则读取第一个数据连接,并测试该数据连接是否有效;如果测试数据连接无效,则清除当前连接池内的所有数据连接,重新初始化数据连接池并返回;如果测试数据连接有效,则遍历当前数据库连接池内的所有数据连接,判断每一个数据连接是否超过最大空闲时间,如果不超过则取出下一个数据连接,如果超过最大空闲时间则从数据库层释放该数据连接; 如果连接池内数据连接个数为O,则判断当前外部程序使用的数据连接个数是否已经到达连接池内最小数据连接数,如果未达到连接池内最小数据连接数,则增加数据连接个数到达连接池内最小数据连接数,并加入当前数据库连接池后返回。
8.根据权利要求7所述的数据库连接池的控制方法,测试数据连接是否有效方法包括:根据当前数据连接的数据库类型,采用合适的sql语句进行测试。
9.根据权利要求7所述的数据库连接池的控制方法,判断配置文件是否已经修改包括: 获取当前时间和数据库配置文件的最后修改时间,如果配置文件的最后修改时间大于当前时间减去数据库检查周期,表示已修改。
10.根据权利要求7所述的数据库连接池的控制方法,其中,数据库配置文件包括: 数据源名称、数据库驱动类名、数据库访问路径、连接池内最小数据连接个数、连接池内最大数据连接个数、数据`库检查周期。
【文档编号】G06F9/48GK103605571SQ201310586676
【公开日】2014年2月26日 申请日期:2013年11月20日 优先权日:2013年11月20日
【发明者】陈清水, 李海, 刘红超, 张健 申请人:国家电网公司, 北京许继电气有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1