快速业务通道

基于JDBC的数据库连接池高效管理策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

基于JDBC的数据库连接池高效管理策略

时间:2010-12-17

在基于JDBC的数据库应用开发中,数据库连接的管理是一个难点,因为它是决定该应用性能的一个重要因素。本文在对数据库连接进行透彻分析的基础上,提出并实现了一个高效的连接管理策略,使得开发高性能的数据库应用变得相对容易。特别是,对于连接管理中的两个难点:事务和多线程问题进行了深入的剖析,并给出了一个基于设计模式的解决方案。

介绍

在使用Java语言进行和数据库有关的的应用开发中,一般都使用JDBC来进行和数据库的交互,其中有一个关键的概念就是Connection(连接),它在Java中是一个类,代表了一个通道。通过它,使用数据的应用就可以从数据库访问数据了。

对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。

本文给出的方法可以有效的解决这个问题。在本方法中提出了一个合理、有效的连接管理策略,避免了对于连接的随意、无规则的使用。该策略的核心思想是:连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。另外,由于对JDBC中的原始连接进行了封装,从而方便了数据库应用对于连接的使用(特别是对于事务处理),提高了开发效率,也正是因为这个封装层的存在,隔离了应用的本身的处理逻辑和具体数据库访问逻辑,使应用本身的复用成为可能。

问题产生

我参与的项目是开发一个网管系统,不可避免的要和数据库打交道。刚开始时,由于对于数据库的访问不是很频繁,对于数据库连接的使用就是简单的需要时就建立,用完就关闭的策略,这很符合XP(eXtreme Programming)的口号:"Do the Simplest Thing that Could Possibly Work"。确实,开始时工作的很好。随着项目的进展,对于数据库的访问开始变的频繁,问题就暴露出来了,原先的通过简单地获取和关闭数据库连接的方法将很大的影响系统的性能,这种影响是由于数据库资源管理器进程频繁的创建和摧毁那些连接对象而引起的。

此时,就有必要对数据库访问方法进行重构(refactoring),因为我们确实需要进行改进,来提高系统的性能。

解决方案

可以看出,问题的根源就是由于对于连接资源的低效管理造成的。对于共享资源,有一个很著名的设计模式:资源池。该模式正是为了解决资源频繁分配、释放所造成的问题的。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,提供一套高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。

3.1、建立连接池

第一步,就是要建立一个静态的连接池,所谓静态是指,池中的连接是在系统初始化时就分配好的,并且不能够随意关闭的。Java中给我们提供很多容器类可以方便的用来构建连接池,如:Vector、Stack等。在系统初始化时,根据配置创建连接并放置在连接池中,以后所使用的连接都是从该连接池中获取的,这样就可以避免连接随意建立、关闭造成的开销(当然,我们没有办法避免Java的Garbage Collection带来的开销)。

3.2、分配、释放策略

有了这个连接池,下面我们就可以提供一套自定义的分配、释放策略。

当客户请求数据库连接时,首先看连接池中是否有空闲连接,这里的空闲是指,目前没有分配出去的连接。如果存在空闲连接则把连接分配给客户,并作相应处理,具体处理策略,在关键议题中会详述,主要的处理策略就是标记该连接为已分配。若连接池中没

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号