2 连接池管理
连接池管理主要由三部分组成:连接池的建立、连接的使用管理、连接池的关闭。通过这三部分,连
接池成为众多连接对象的“缓冲存储池”,也就是连接对象的集合体,它提供一种管理机制来控制连接池
内部连接对象的数目,对应用程序提供获取、释放连接的接口。
2.1 连接池的建立
应用程序中要建立一个在系统初始化时就已分配好连接数目的静态连接池, 且这些连接不能随意关闭。
这些连接对象作为系统可分配的自由连接,以后所使用的连接都从连接池获取,这样可避免随意建立、释
放连接所带来的开销。
2.2 连接的使用管理
连接的使用管理是连接池管理机制的核心。有了连接池,所有用户申请连接时直接向连接池申请,而
非数据库。同理,所有用户释放连接时,是向连接池释放连接而非关闭数据库连接。连接池分配释放策略
是
[2]
:连接池先检查有否未被分配的空闲连接,若有则把空闲连接分配给用户;反之要检查连接个数是否
达到了连接上限。如果没有达到上限可以建立一个新连接分配给用户,否则需要等待,直到有别的用户释
放连接时再把释放后的连接分配给该用户。由此可知:连接池技术能够保证数据库连接的有效复用,避免
频繁地建立、释放连接所带来的系统资源开销。
2.3 连接池的关闭
用户退出程序时,与连接池的建立是一个相反的过程,即把在连接池建立时向数据库申请的连接对象
统一归还给数据库连接池,以便连接池分配给其它用户。
3 基于 java 的连接池类的设计
主要要分为三个步骤:定义连接池类;创建管理类;管理类与主程序的接口。
3.1 定义连接池类
数据库连接池设计的方法很多,但是连接池的构建首先都要确定类,本方法构建如下五个类
[3]
:①
GetProperty 类,该类的功能用于从文件 poolfile 中读取数据库连接池的一般属性,如连接用户名,密码
等验证信息。采用该方法的好处就是连接池不用关心操作的是什么类型的数据库,以及数据库的属性。当
数据库的类型或属性发生改变时,管理员只要修改文件 PropFile 即可。② ConnectionFactory 类,该类为
连接池的工厂类,其中定义一些参数如:正在使用的连接池参数 use、空闲连接池参数 idle 、最大连接数
maxactive 、最小连接数 minactive 、当前连接数 active 和管理策略参数等。③ FactoryMangeThreadl 类,
该类的功能是实现静态管理和动态管理两种策略,并设置了最大限制和恒定的连接数,它将连接池又细分
为两级小连接池,一个空闲连接池,一个使用池。④ FactoryParam 类,该类是连接池工厂的参数类,定义
了最大连接数和最小连接数,并定义了回收策略,提供良好的用户接口等。⑤ Substituteconnection 类,
该类定义了数据库连接和监控连接创建的语句,数据库上一次访问的时间和数据库的状态是否为忙,要接
管的函数的名字等参数。 它通过触发 java.1ang.reflect 包中 invocationHandler 的 invoke 方法,运用动
态代理机制接管接口的方法接管,并实现了连接池的名字与其对象之间的映射。