基于JDBC的数据库连接池技术的研究与设计

上传人:壹****1 文档编号:564538278 上传时间:2023-10-18 格式:DOC 页数:9 大小:24.50KB
返回 下载 相关 举报
基于JDBC的数据库连接池技术的研究与设计_第1页
第1页 / 共9页
基于JDBC的数据库连接池技术的研究与设计_第2页
第2页 / 共9页
基于JDBC的数据库连接池技术的研究与设计_第3页
第3页 / 共9页
基于JDBC的数据库连接池技术的研究与设计_第4页
第4页 / 共9页
基于JDBC的数据库连接池技术的研究与设计_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《基于JDBC的数据库连接池技术的研究与设计》由会员分享,可在线阅读,更多相关《基于JDBC的数据库连接池技术的研究与设计(9页珍藏版)》请在金锄头文库上搜索。

1、基于JDBC的数据库连接池技术的研究与设计摘要本文介绍了基于JDB的数据库连接池的工作原理,阐述了连接池技术的事务处理、多数据库效劳器等各项关键技术,提出了一个高效的连接池管理策略,最后详细说明了数据库连接池应用的详细实现过程。关键词JDB;数据库;连接池;事务处理随着信息技术的高速开展与广泛应用,数据库技术在信息技术领域中的位置越来越重要,尤其是网络应用和电子商务的迅速开展,都需要数据库技术支持动态eb站点的运行,而传统的开发形式是:首先在主程序如Servlet、Beans中建立数据库连接;然后进展SQL操作,对数据库中的对象进展查询、修改和删除等操作;最后断开数据库连接。使用这种开发形式,

2、对于一个简单的数据库应用,由于数据库的访问不是很频繁,只需要在访问数据库时创立一个连接,用完后就关闭它,这样做不会明显的增大系统的开销。但是对于一个复杂的数据库应用,情况就完全不同:频繁的建立、关闭数据库,会极大的降低系统的性能,增大系统的开销,甚至成为系统的瓶颈。另外使用这种传统的形式,还必须管理数据库的每一个连接,以确保他们能正确关闭,假如出现程序异常而导致某些连接未能关闭,将引起数据库系统中的内存泄露,最终不得不重启数据库。因此采用运行速度更快、数据库访问效率更高的数据库技术,以进步系统的运行效率将是至关重要的。为理解决这一问题,在JDB2.0中提出了JDB连接池技术,通过在客户之间共享

3、一组连接,而不是在它们需要的时候再为它们生成,这样就可以改善资源使用,进步应用程序的响应才能。1JDB概述JDBJavaDatabasennetivity,Java数据库连接是一种用于执行SQL语句的JavaAPI,可以为多种关系型数据库如rale、Sybase、SQLServer、Aess等提供统一访问接口,它由一组Java语言编写的类和接口组成,使数据库开发人员可以用标准JavaAPI编写数据库应用程序。2连接池技术2.1连接池原理连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、管理策略,使得该连接池中的连接可以得到高效、平安的复用,防止了数据库连接频繁建

4、立、关闭的开销。另外,由于对JDB中的原始连接进展了封装,从而方便了数据库应用对于连接的使用特别是对于事务处理,进步了开发效率,也正是因为这个封装层的存在,隔离了应用的本身的处理逻辑和详细数据库访问逻辑,使应用本身的复用成为可能。连接池主要由三局部组成如图1所示:连接池的建立、连接池中连接的使用管理、连接池的关闭。下面就着重讨论这三局部及连接池的配置问题。图1连接池形式2.1.1连接池的建立应用程序中建立的连接池其实是一个静态的。所谓静态连接池是指连接池中的连接在系统初始化时就已分配好,且不能随意关闭连接。Java中提供了很多容器类可以方便的构建连接池,如:Vetr、Stak、Servlet、

5、Bean等,通过读取连接属性文件nnetins.prperties与数据库实例建立连接。在系统初始化时,根据相应的配置创立连接并放置在连接池中,以便需要使用时能从连接池中获取,这样就可以防止连接随意的建立、关闭造成的开销。2.1.2连接池的管理连接池管理策略是连接池机制的核心。当连接池建立后,如何对连接池中的连接进展管理,解决好连接池内连接的分配和释放,对系统的性能有很大的影响。连接的合理分配、释放可进步连接的复用,降低了系统建立新连接的开销,同时也加速了用户的访问速度。下面介绍连接池中连接的分配、释放策略。连接池的分配、释放策略对于有效复用连接非常重要,我们采用的方法是一个很有名的设计形式:

6、Refereneunting引用记数。该形式在复用资源方面应用的非常广泛,把该方法运用到对于连接的分配释放上,为每一个数据库连接,保存一个引用记数,用来记录该连接的使用者的个数。详细的实现方法是:当客户恳求数据库连接时,首先查看连接池中是否有空闲连接指当前没有分配出去的连接。假如存在空闲连接,那么把连接分配给客户并作相应处理即标记该连接为正在使用,引用计数加1。假如没有空闲连接,那么查看当前所开的连接数是不是已经到达axnn最大连接数,假如没到达就重新创立一个连接给恳求的客户;假如到达就按设定的axaitTie最大等待时间进展等待,假如等待axaitTie后仍没有空闲连接,就抛出无空闲连接的异

7、常给用户。当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,假如超过就删除该连接,并判断当前连接池内总的连接数是否小于innn最小连接数,假设小于就将连接池充满;假如没超过就将该连接标记为开放状态,可供再次复用。可以看出正是这套策略保证了数据库连接的有效复用,防止频繁地建立、释放连接所带来的系统资源开销。2.1.3连接池的关闭当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库即关闭所有数据库连接,这与连接池的建立正好是一个相反过程。2.1.4连接池的配置数据库连接池中到底要放置多少个连接,才能使系统的性能更佳,用innn和axnn来限制。

8、innn是当应用启动的时候连接池所创立的连接数,假如过大启动将变慢,但是启动后响应更快;假如过小启动加快,但是最初使用的用户将因为连接池中没有足够的连接不可防止的延缓了执行速度。因此应该在开发的过程中设定较小innn,而在实际应用的中设定较大innn。axnn是连接池中的最大连接数,可以通过反复试验来确定此饱和点。为此在连接池类nnetinPl中参加两个方法getAtiveSize和getpenSize,AtiveSize表示某一时间有多少连接正被使用,penSize表示连接池中有多少连接被翻开,反映了连接池使用的峰值。将这两个值在日志信息中反响出来,innn的值应该小于平均AtiveSize

9、,而axnn的值应该在ativeSize和penSize之间。2.2连接池的关键技术2.2.1事务处理前面讨论的是关于使用数据库连接进展普通的数据库访问。对于事务处理,情况就变得比拟复杂。因为事务本身要求原那么性的保证,此时就要求对于数据库的操作符合All-All-Nthing原那么,即要么全部完成,要么什么都不做。假如简单的采用上述的连接复用的策略,就会发生问题,因为没有方法控制属于同一个事务的多个数据库操作方法的动作,可能这些数据库操作是在多个连接上进展的,并且这些连接可能被其他非事务方法复用。nnetin本身具有提供了对于事务的支持,可以通过设置nnetin的Autit属性为false,

10、显式的调用it或rllbak方法来实现。但是要平安、高效的进展连接复用,就必须提供相应的事务支持机制。方法是:采用显式的事务支撑方法,每一个事务独占一个连接。这种方法可以大大降低对于事务处理的复杂性,并且又不会阻碍连接的复用。连接收理效劳提供了显式的事务开场、完毕it或rllbak声明,以及一个事务注册表,用于登记事务发起者和事务使用的连接的对应关系,通过该表,使用事务的局部和连接收理局部就隔分开,因为该表是在运行时根据实际的调用情况动态生成的。事务使用的连接在该事务运行中不能被复用。在实现中,用户标识是通过使用者所在的线程来标识的。后面的所有对于数据库的访问都是通过查找该注册表,使用已经分配

11、的连接来完成的。当事务完毕时,从注册表中删除相应表项。2.2.2封装从上面的阐述可以看出,普通的数据库方法和事务方法对于连接的使用分配、释放是不同的,为了便于使用,对外提供一致的操作接口,我们对连接进展了封装:普通连接和事务连接,并利用了Java中的强大的面向对象特性:多态。普通连接和事务连接均实现了一个Dbnnetin接口,对于接口中定义的方法,分别根据自己的特点作了不同的实现,这样在对于连接的处理上就非常的一致了。2.2.3并发为了使连接收理效劳有更大的通用性,我们必需要考虑到多线程环境,即并发问题。在一个多线程的环境下,必需要保证连接收理自身数据的一致性和连接内部数据的一致性,在这方面J

12、ava提供很好的支持synhrnized关键字,这样就很容易使连接收理成为线程平安的。2.2.4多数据库效劳器在实际应用中,应用程序常常需要访问多个不同的数据库。如何通过同一个连接池访问不同的数据库,是应用程序需要解决的一个核心问题。下面介绍一种解决的途径:首先,定义一个数据库连接池参数的类,定义了数据库的JDB驱动程序类名,连接的URL以及用户名口令等等一些信息,该类是用于初始化连接池的参数:publilassnnetinParaipleentsSerializable/各初始化参数的定义其次是连接池的工厂类nnetinFatry,通过该类将一个连接池对象与一个名称对应起来,使用者通过该名称

13、就可以获取指定的连接池对象,实现的主要代码如下:publilassnnetinFatrystatiHashtablennetinPls=/用来保存数据源名和连接池对象的关系publistatiDataSurelkup(StringdataSureNae)thrsNaeNtFundExeptin/查找名字为dataSureNae的数据源publistatiDataSurebind(Stringnae,nnetinParapara)thrsExeptin/将名字nae与使用para初始化的连接池对象绑定publistatividunbind(Stringnae)thrsNaeNtFundExept

14、in/将与名字nae绑定的连接池对象删除3连接池应用的实现一个完好的连接池应用包括三个局部:DBnnetinPl类,负责从连接池获取(或创立)连接、将连接返回给连接池、系统关闭时关闭所有连接释放所有资源;DBnnetinanager类,负责装载和注册JDB驱动、根据属性文件中定义的属性创立DBnnetinPl、跟踪应用程序对连接池的引用等;应用程序对连接池的使用。本文实现的数据库连接池包括一个管理类DBnnetinanager,负责提供与多个连接池对象(DBnnetinPl类)之间的接口。每一个连接池对象管理一组封装过的JDB连接对象nn,封装过的JDB连接对象nn可以被任意数量的del层的组

15、件共享。类nn的设计很简单,如下所示:lassnnPrivatejava.sgl.nnetinn;/数据库连接对象PubliBleaninUse;/是否被使用PublilnglastAess;/最近一次释放该连接的时间Publiintuseunt;/被使用次数下面是实现连接池的主要代码:/初始化数据库连接池publistatisynhrnizedvidFastInitPl()thrsExeptintrylass.frNae(driver);fr(inti=0;isize;i+)nnetinn=reatennetin();if(n!=null)addnnetin(n);/向连接池对象中添加数据库连接privatestatividaddnnetin(nnetinn)if(pl=null|pl1=null)pl=neVetr(size);pl1=neVetr(size);pl.addEleent(n);pl1.addEleent(false);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号