




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、研究分析jdbc技术在数据库连接池上的应用2009-07-22 11:45 51cto 论坛 我要评论(0)字号:t t收蔽e本文介绍了利用jdbc技术访问数据库的原理及其存在的问题,提出了解决办法一数据库连 接池,并对其关键问题进行了分析,构建了一个简便易用的数据库连接池并结合当前热门技 术servlet说明了其如何在开发吋使用。ad:近年来,随着internet/intranet建网技术的飞速发展和在世界范围内的迅速普及,计 算机应用程序已从传统的桌血应用转到web应用。基于b/s (browser/server)架构的3层 开发模式逐渐取代c/s (client/server)架构的开发
2、模式,成为开发企业级应用和电子商 务普遍采用的技术。在web应用开发的早期,主要使用的技术是cgi?asp?php等。之后,sun 公司推出了基于java语言的servlet+jsp+javabean技术。相比传统的开发技术,它具有跨 平台?安全?有效?可移植等特性,这使其更便于使用和开发。java技术应用程序访问数据库的基本原理在java语言中,jdbc (java database connection)是应用程序与数据库沟通的桥梁,即java语言通过jdbc技术访问数据库。jdbc是一种“开放”的方案,它为数据库应 用开发人员?数据库前台工具开发人员提供了种标准的应用程序设计接口,使开发
3、人员可 以用纯java语言编写完整的数据库应用程序。jdbc提供两种api,分别是血向开发人员的 api和面向底层的jdbc驱动程序api,底层主要通过直接的jdbc驱动和jdbc-0dbc桥驱动 实现与数据库的连接。一般来说,*阳应用程序访问数据库的过程是: 装载数据库驱动程序; 通过jdbc建立数据库连接; 访问数据库,执行sql语句; 断开数据库连接。jdbc作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行web应用程序开发,存在很多问题:首先,每一次web请求都要建立一次数据库连接。建立连接 是一个费吋的活动,每次都得花费0.05sis的时间,而且系统还要分配内存资源。这
4、个吋 间对于一次或儿次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的web应用, 尤其是大型电子商务网站,同时有儿百人甚至儿千人在线是很正常的事。在这种情况下,频 繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的其至 会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。 其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭, 将会导致数据库系统屮的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被 创建的连接对象数,系统资源会被毫无顾及的分配岀去,如连接过多,也可能导致内存泄漏, 服务器崩溃。数
5、据库连接池(connection pool)的工作原理1、基本概念及原理市上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,对于共享资源,有一个很著名的设计模式:资源池(resource pool)。该 模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题,对以采用数据库 连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲 池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用 完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。 更为重要的是我们对以通过连接池的管理机制监视
6、数据库的连接的数量?使用情况,为系统 开发?测试及性能调整提供依据。2、服务器自带的连接池jdbc的api中没有提供连接池的方法。一些大型的web应用服务器如bea的weblogic 和ibm的websphere等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池 的用法。连接池关键问题分析1、并发问题为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题 相对比较好解决,因为java语言自身提供了对并发管理的支持,使用synchronized关键字 即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized关键字,如:public synch
7、ronized connection getconnection ()2、多数据库服务器和多用户对于大型的企业级应用,常常需要同时连接不同的数据库(如连接oracle和sybase)。 如何连接不同的数据库呢?我们采用的策略是:设计一个符合单例模式的连接池管理类,在 连接池管理类的唯一实例被创建时读取一个资源文件,其屮资源文件屮存放着多个数据库的 url 地址()?用户名()?密码()等信息。如 tx. url=172.21. 15. 123: 5000/tx it, tx. user=yang, tx. password二yang321。根据资源文件提供的信息,创建多个连接池类的实 例,每一
8、个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个 名字,通过不同的名字来管理不同的连接池。对于同一个数据库有多个用户使用不同的名称和密码访问的情况,也可以通过资源文件 处理,即在资源文件中设置多个具有相同ml地址,但具有不同用户名和密码的数据库连接 信息。3、事务处理我们知道,事务具有原子性,此时耍求对数据库的操作符合“all-all-notiiing”原则, 即对于一组sql语句耍么全做,要么全不做。在java语言中,connection类本身提供了对事务的支持,对以通过设置connection 的autocommit屈性为false,然后显式的调用commit或ro
9、llback方法来实现。但耍高效的 进行connection复用,就必须提供相应的事务支持机制。对采用每一个事务独占一个连接 来实现,这种方法可以大大降低事务管理的复杂性。4、连接池的分配与释放连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接 的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。对丁连接的管理对使用空闲池。即把己经创建但尚未分配出去的连接按创建时间存放到 一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有 就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否 有效的判断,如果对用
10、就分配给用户,如不对用就把这个连接从空闲池删掉,重新检测空闲 池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数 (maxconn),如果没有达到,就新建一个连接,如果己经达到,就等待一定的时间(timeout)。 如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间 超过预定时间timeout,则返回空值(null)。系统对己经分配出去正在使用的连接只做计 数,当使用完后再返还给空闲池。对于空闲连接的状态,对开辟专门的线程定时检测,这样 会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分 配前检测的方法。5
11、、连接池的配置与维护连接池屮到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数 (ininconn)和最人连接数(maxconn)来控制连接池小的连接。最小连接数是系统启动时连 接池所创建的连接数。如杲创建过多,则系统启动就慢,但创建后系统的响应速度会很快; 如杲创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小 连接数,开发起来会快,而在系统实际使用时设置较人的,因为这样对访问客八来说速度会 快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可 通过反复测试,找到最佳点。如何确保连接池中的最小连接数呢?有动态和静态两种策
12、略。动态即每隔一定时间就对 连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连 接池的正常运转。静态是发现空闲连接不够时再去检查。连接池的实现1、连接池模型本文讨论的连接池包括一个连接池类(dbconnectionpool)和一个连接池管理类 (dbconnetionpoolmanager) 0连接池类是对某一数据库所有连接的"缓冲池”,主要实现 以下功能:从连接池获取或创建对用连接;使用完毕之后,把连接返还给连接池;在 系统关闭前,断开所有连接并释放连接占用的系统资源;还能够处理无效连接(原来登记 为可用的连接,市于某种原因不再可用,如超时,通讯问题)
13、,并能够限制连接池中的连接 总数不低于某个预定值和不超过某个预定值。连接池管理类是连接池类的外覆类(wrapper),符合单例模式,即系统中只能有一个连 接池管理类的实例。其主要用丁对多个连接池对彖的管理,具有以下功能:装载并注册特 定数据库的jdbc驱动程序;根据屈性文件给定的信息,创建连接池对彖;为方便管理 多个连接池对象,为每一个连接池对象取一个名字,实现连接池名字与其实例之间的映射; 跟踪客户使用连接情况,以便需耍是关闭连接释放资源。连接池管理类的引入主要是为了 方便对多个连接池的使用和管理,如系统需耍连接不同的数据库,或连接相同的数据库但rh 于安全性问题,需要不同的用户使用不同的名
14、称和密码。2、连接池实现f面给出连接池类和连接池管理类的主要属性及所要实现的基本接口:public class dbconnectionpoo丄 implements timerlistenerprivate int checkedout; /已被分配出去的连接数private arraylist freeconnections = new arraylist () ;/容器,空闲池,根据 /创建时间顺序存放己创建但尚未分配出去的连接private int minconn;/连接池里连接的最小数量private int maxconn;/连接池里允许存在的最人连接数 private strin
15、g name;/为这个连接池取个名字,方便管理 private string password; /连接数据库时需要的密码 private string url; /所要创建连接的数据库的地址 private string user;/连接数据库时需耍的用户名 public timer timer; /eu寸器public dbconnectionpoo丄(string name, string url, string user, stringpassword, int maxconn) /公开的构造函数public synchronized void freeconnection (conn
16、ection con) /使用完毕之 后,/把连接返还给空闲池public synchronized connection getconnection(long timeout)/得至u 个连 接,/timeout是等待时间public synchronized void release () /断开所冇连接,释放占用的系统资源 private connection newconnection () /新建一个数据库连接public synchronized void timerevent () /定时器事件处理函数public class dbconnectionmanager static
17、 private dbconnectionmanager instance;/连接池管壬里类的唯实例 static private int clients;/客户数量private arraylist drivers = new arraylist() ;/容器,存放数据库驱动程序 private hashmap pools = new hashmap () ;/以 nmme/vb丄ue 的形式存取连接也/ 对彖的名字及连接池对彖static synchronized public dbconnectionman吕ge匸 getlnstance ()/女果唯 一的/实例instance已经创建
18、,直接返回这个实例;否则,调用私有构造函数,创/建连接 池管理类的唯一实例private dbconnectionmanager () /私有构造函数,在其中调用初始化函数init () public void freeconnection (string name, connection con) / 释放一个连 接,/name是一个连接池对象的名字public connection get connection (string name) /从幺字为 name 的连扌妾 j也乂 寸象 /中得到一个连接public connection getconnection (string name,
19、 long time)/从名字为name/的连接池对彖中取得一个连接,time是等待时间public synchronized void release () /释放所冇资源private void createpools (properties props) /根据属性文件提供的信息,创建 /一个或多个连接池private void init () /初始化连接池管理类的唯一实例,由私有构造函数调用 private void loaddrivers (properties props) /装载数据库马区动#呈序34. 3、连接池使用上面所实现的连接池在程序开发时如何应用到系统屮呢?下面以servlet为例说明连 接池的使用。servlet的生命周期是:在开始建立servlet时,调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西贵港桂平市江口中心卫生院招聘3人考前自测高频考点模拟试题完整答案详解
- 2025湖南娄底冷水江市城发实业有限公司公开招聘实验室试验员的考前自测高频考点模拟试题及参考答案详解1套
- 大学课件片头
- 2025人民医院流程优化能力考核
- 2025广西石卡镇储备村(社区)“两委”后备人才152人考前自测高频考点模拟试题及答案详解参考
- 2025年福建供电服务公司招聘笔试考前自测高频考点模拟试题及答案详解(夺冠系列)
- 2025安徽芜湖鸠江区招聘区属国有企业领导人员拟聘用人员(二)考前自测高频考点模拟试题附答案详解(模拟题)
- 2025北京市通州区不动产登记中心协办员招聘1人考前自测高频考点模拟试题及答案详解参考
- 上海市中医院学术会议学习汇报与知识转化能力考核
- 2025中心医院切缘评估诊断考核
- 枫蓼肠胃康胶囊与其他肠胃药的协同作用研究
- 环境污染物对人体健康影响的研究
- 国家开放大学理工英语1边学边练
- 人工智能导论PPT完整全套教学课件
- 卡氏肺孢子虫肺炎
- 陕中医大西医外科学教案05水、电解质代谢和酸碱平衡的失调
- 俱舍论原文内容
- GB/T 18742.3-2017冷热水用聚丙烯管道系统第3部分:管件
- 肺癌患者随访服务记录表
- 高三班主任经验交流课件
- 小学英语三年级上册全册课件
评论
0/150
提交评论