没有合适的资源?快使用搜索试试~ 我知道了~
首页Java jdbc数据库连接池总结.doc
Java jdbc数据库连接池总结.doc

Java jdbc数据库连接池Java jdbc数据库连接池Java jdbc数据库连接池Java jdbc数据库连接池
资源详情
资源评论
资源推荐

当前位置首页 程序设计 数据库连接池总结
数据库连接池总结
引言
近年来,随着 建网技术的飞速发展和在世界范围内的迅速普及,
计算机
应用程序已从传统的桌面应用转到 应用。基于 ()架构的
层开发模式逐渐取代 ()架构的开发模式,成为开发企业级应用和
电子商务普遍采用的技术。在 应用开发的早期,主要使用的技术是 ﹑ ﹑
! 等。之后," 公司推出了基于 语言的 #$# 技术。相比
传统的开发技术,它具有跨平台﹑安全﹑有效﹑可移植等特性,这使其更便于使用和开发。
应用程序访问数据库的基本原理
在 语言中,%(%)是应用程序与数据库沟通
的桥梁&
即 语言通过 % 技术访问数据库。% 是一种“开放”的方案,它为数据库应
用开发人员﹑数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员
可以用纯 语言编写完整的数据库应用程序。% 提供两种 ,分别是面向开发人
员的 和面向底层的 % 驱动程序 ,底层主要通过直接的 % 驱动和 %'
(% 桥驱动实现与数据库的连接。
一般来说, 应用程序访问数据库的过程(如图 所示)是:
①装载数据库驱动程序;
②通过 % 建立数据库连接;
③访问数据库,执行 )* 语句;
④断开数据库连接。
图 数据库访问机制
% 作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行 应
用
程序开发,存在很多问题:首先,每一次 请求都要建立一次数据库连接。建立
连接是一个费时的活动,每次都得花费 ++,~ 的时间,而且系统还要分配内存资源。
这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的
应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这
种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下
降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展
的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出
现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有
这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多
也可能导致内存泄漏,服务器崩溃。
数据库连接池($)的工作原理
、基本概念及原理
由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,
对于共享资源,有一个很著名的设计模式:资源池(-" )。该模式正是
为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池

技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放
入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之
后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为
重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开
发﹑测试及性能调整提供依据。连接池的基本工作原理见下图 .。
图 .连接池的基本工作原理
.、服务器自带的连接池
% 的 中没有提供连接池的方法。一些大型的 / 应用服务器如 / 的
*0 和 1 的 $2 等提供了连接池的机制,但是必须有其第三方的专用
类方法支持连接池的用法。
连接池关键问题分析
、并发问题
为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问
题相对比较好解决,因为 语言自身提供了对并发管理的支持,使用 324
关键字即可确保线程是同步的。使用方法为直接在类方法前面加上 324 关键字,
如:
$"3240()
.、多数据库服务器和多用户
对于大型的企业级应用,常常 需 要 同 时 连 接 不 同 的 数 据 库 ( 如 连 接 ( 和
3)。如何连接不同的数据库呢?我们采用的策略是:设计一个符合单例模式的连
接池管理类,在连接池管理类的唯一实例被创建时读取一个资源文件,其中资源文件中存
放着多个数据库的 " 地址(5$67")﹑用户名(5$67")﹑
密 码 ( 5$67$ ) 等 信 息 。 如 8"9:.;<.,+++
8=,8"93,8$9.>,;。根据资源文件提供的信息,创建多个连
接池类的实例,每一个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接
池实例取一个名字,通过不同的名字来管理不同的连接池。
对于同一个数据库有多个用户使用不同的名称和密码访问的情况,也可以通过资源文
件处理,即在资源文件中设置多个具有相同 " 地址,但具有不同用户名和密码的数据库
连接信息。
、事务处理
我们知道,事务具有原子性,此时要求对数据库的操作符合“**'**'6(?!6@
原则&即对于一组 )* 语句要么全做,要么全不做。
在 语言中, 类本身提供了对事务的支持,可以通过设置
的 "77 属性为 A&然后显式的调用 77 或 B 方法来实现。但要高
效的进行 复用,就必须提供相应的事务支持机制。可采用每一个事务独占一
个连接来实现,这种方法可以大大降低事务管理的复杂性。
>、连接池的分配与释放
连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连
接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。
对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放
到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如
果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连
接是否有效的判断,如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新

检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最
大连接数(78)&如果没有达到,就新建一个连接,如果已经达到,就等待一定的
时间(7")。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待
的用户,如果等待时间超过预定时间 7"&则返回空值(")。系统对已经分配出去
正在使用的连接只做计数,当使用完后再返还给空闲池。对于空闲连接的状态,可开辟专
门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取
不开辟专门线程,只是在分配前检测的方法。
,、连接池的配置与维护
连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接
数(7)和最大连接数(78)来控制连接池中的连接。最小连接数是系统
启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速
度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设
置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问
客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看
系统的访问量,可通过反复测试,找到最佳点。
如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就
对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接&以保证
连接池的正常运转。静态是发现空闲连接不够时再去检查。
连接池的实现
、连接池模型
本文讨论的连接池包括一个连接池类(% )和一个连接池管理类
(% 10)和一个配置文件操作类C %D0E。连接池类
是对某一数据库所有连接的“缓冲池”,主要实现以下功能: ①从连接池获取或创建可用连
接;②使用完毕之后,把连接返还给连接池;③在系统关闭前,断开所有连接并释放连接
占用的系统资源;④还能够处理无效连接(原来登记为可用的连接,由于某种原因不再可
用,如超时,通讯问题),并能够限制连接池中的连接总数不低于某个预定值和不超过某
个预定值。C,E当多数据库时&且数据库是动态增加的话&将会加到配置文件中。
连接池管理类是连接池类的外覆类($$)&符合单例模式,即系统中只能有一
个连接池管理类的实例。其主要用于对多个连接池对象的管理,具有以下功能:①装载并
注册特定数据库的 % 驱动程序;②根据属性文件给定的信息,创建连接池对象;③为
方便管理多个连接池对象,为每一个连接池对象取一个名字,实现连接池名字与其实例之
间的映射;④跟踪客户使用连接情况,以便需要是关闭连接释放资源。连接池管理类的引
入主要是为了方便对多个连接池的使用和管理,如系统需要连接不同的数据库,或连接相
同的数据库但由于安全性问题,需要不同的用户使用不同的名称和密码。
.、连接池实现C经过本人改版&可以适用多数据库类型的应用以及一种数据库类型多个数
据库且数据 库的数量可以动态增加的应用程序E
E&% 数据库连接池类
.E&%10数据库管理类
E&%D0单个数据库连接信息
>E& %D0操作多C这个F多F包括不同的数据库和同一种数据库有多个数据
库E
数据 配置文件 87
,E&D087数据库配置文件 87

%
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
GG
G数据库连接池类
G
$B072"B3H
7$IH
7$I%10H
7$I)*/8$H
7$"3*H
7$"H
7$"?7H
GG
GJ"223
G
G
$"% 7$7?7*K
$9"H
$L9+H使用的连接数
$3*A93*CEH容器,空闲连接
$7H最小连接数
$78H最大连接
$07H连接池名字
$0$H密码
$0"H数据库连接地址
$0H驱动
$0"H用户名
$"?77H定时
GG
G
G
$"% CEK
?(%("'0""
M
GG
G创建连接池
GJ$7
GJ$77
GJ$7L-*
GJ$7"
GJ$7$
GJ$778
G

$" % C0 7& 0 &0 L-*& 0
"&0$&78E
K
2797H
29H
2"9L-*H
2"9"H
2$9$H
278978H
M
GG
G用完,释放连接
GJ$7
G
$"324ACE
K
2ACEH添加到空闲连接的末尾
2L''H
M
GG
G7"根据 7" 得到连接
GJ$77"
GJ"
G
$"3240C07"E
K
9"H
AC2A4CE+E
K
9CE2A0C+EH
AC99"E90C7"EH继续获得连接
M
K
9CEH新建连接
M
AC27899+NN27852LE
K
9"H达到最大连接数,暂时不能获得连接了。
M
ACO9"E
K
2L##H
M
剩余38页未读,继续阅读



















mrten
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- ARM Cortex-A(armV7)编程手册V4.0.pdf
- ABB机器人保养总结解析.ppt
- 【超详细图解】菜鸡如何理解双向链表的python代码实现
- 常用网络命令的使用 ipconfig ping ARP FTP Netstat Route Tftp Tracert Telnet nslookup
- 基于单片机控制的DC-DC变换电路
- RS-232接口电路的ESD保护.pdf
- linux下用time(NULL)函数和localtime()获取当前时间的方法
- Openstack用户使用手册.docx
- KUKA KR 30 hA,KR 60 hA机器人产品手册.pdf
- Java programming with JNI
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论4