基于JDBC的数据库连接池技术研究与设计 - 编程入门网
Counting(引用记数)。该模式在复用资源方 面应用的非常广泛,把该方法运用到对于连接的分配释放上,为每一个数据库连 接,保留一个引用记数,用来记录该连接的使用者的个数。具体的实现方法是:
当客户请求数据库连接时,首先查看连接池中是否有空闲连接(指当前没有 分配出去的连接)。如果存在空闲连接,则把连接分配给客户并作相应处理(即 标记该连接为正在使用,引用计数加1)。如果没有空闲连接,则查看当前所开 的连接数是不是已经达到maxConn(最大连接数),如果没达到就重新创建一个 连接给请求的客户;如果达到就按设定的maxWaitTime(最大等待时间)进行等 待,如果等待maxWaitTime后仍没有空闲连接,就抛出无空闲连接的异常给用户 。 当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如 果超过就删除该连接,并判断当前连接池内总的连接数是否小于minConn(最小 连接数),若小于就将连接池充满;如果没超过就将该连接标记为开放状态,可 供再次复用。可以看出正是这套策略保证了数据库连接的有效复用,避免频繁地 建立、释放连接所带来的系统资源开销。 1.3 连接池的关闭 当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请 的连接对象统一归还给数据库(即关闭所有数据库连接),这与连接池的建立正 好是一个相反过程。 1.4 连接池的配置 数据库连接池中到底要放置多少个连接,才能使系统的性能更佳,用minConn 和maxConn来限制。minConn是当应用启动的时候连接池所创建的连接数,如果过 大启动将变慢,但是启动后响应更快;如果过小启动加快,但是最初使用的用户 将因为连接池中没有足够的连接不可避免的延缓了执行速度。因此应该在开发的 过程中设定较小minConn,而在实际应用的中设定较大minConn。maxConn是连接 池中的最大连接数,可以通过反复试验来确定此饱和点。为此在连接池类 ConnectionPool中加入两个方法getActiveSize()和getOpenSize(), ActiveSize 表示某一时间有多少连接正被使用,OpenSize表示连接池中有多少 连接被打开,反映了连接池使用的峰值。将这两个值在日志信息中反应出来, minConn的值应该小于平均ActiveSize,而maxConn的值应该在activeSize和 OpenSize之间。 基于JDBC的数据库连接池技术研究与设计(2)时间:2010-12-15 计算机与信息技术 孙鑫鸽 陈刚 孙小玲2、连接池的关键技术 2.1 事务处理 前面讨论的是关于使用数据库连接进行普通的数据库访问。对于事务处理, 情况就变得比较复杂。因为事务本身要求原则性的保证,此时就要求对于数据库 的操作符合"All-All-Nothing"原则,即要么全部完成,要么什么都不做。如果 简单的采用上述的连接复用的策略,就会发生问题,因为没有办法控制属于同一 个事务的多个数据库操作方法的动作,可能这些数据库操作是在多个连接上进行 的,并且这些连接可能被其他非事务方法复用。Connection本身具有提供了对于 事务的支持,可以通过设置Connection的AutoCommit属性为false,显式的调用 commit或rollback方法来实现。但是要安全、高效的进行连接复用,就必须提供 相应的事务支持机制。方法是:采用显式的事务支撑方法,每一个事务独占一个 连接。这种方法可以大大降低对于事务处理的复杂性,并且又不会妨碍连接的复 用。 连接管理服务提供了显式的事务开始、结束(commit或rollback)声明,以 及一个事务注册表,用于登记事务发起者和事务使用的连接的对应关系,通过该 表,使用事务的部分和连接管理部分就隔离开,因为该表是在运行时根据实际的 调用情况动态生成的。事务使用的连接在该事务运行中不能被复用。在实现中, 用户标识是通过使用者所在的线程来标识的。后面的所有 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |