使用数据库连接池Java高效_基于Java的Web数据库连接池高效管理策略

1引言在基于Web的应用程序开发中,数据库支持下的Web页可以具有存储、搜索和智能处理等功能。数据库连接是一类重要的资源,连接数据库不仅要开销一定的通讯和内存资源,还必须完成用户认证、安全上下文配置这类任务,因而往往成为最耗时的操作。随着Web应用的不断深入、用户数量的增加以及Internet上用户请求的随机性,必然会出现并发的用户请求。客户端的并发请求会引起应用程序与数据库连接数的增加,从而使应用程序效率下降。这与人们对基于Web的系统具有足够的动态交互能力的要求产生了矛盾。为解决这一矛盾,除了需要选择配置高性能的服务器外,还应有高效的软件技术来支持。通过Web与数据库相结合也是构造高效Web应用不可缺少的内容,而Web访问数据库效率的高低,直接影响到系统的整体性能。当前,基于B/S模式的三层或多层开发模式,逐渐成为开发企业级Web应用和电子商务普遍采用的方法。以Java为核心的JSP(JavaServerPages)和Servlet技术以其高效性已成为其中的佼佼者[1]。JSP技术开发动态Web应用的数据库访问机制如图1所示。2传统的数据库连接一般情况下,在使用开发基于数据库的Web图1JSP与数据库连接程序时,传统的模式基本是按照以下的步骤执行的:(1)在主程序中(如Servlet.Beans)中建立数据库连接;(2)进行SQL操作,取出数据;(3)断开数据库连接。在这种模式下,系统会为每个请求建立一个新的数据库连接。这种处理方式不仅简单,而且还可以在任何时候处理数据库的多用户请求[2]。当服务器访问量很大时,并发请求的数量也不受严格的限制,每个执行JSP实例的线程都将创建自己的数据库连接并直接与RDBMS引擎通信。但在实际应用中,连接的最大数目将受到许多因素的影响,诸如RDBMS的注册,系统内存,JSP引擎的并发限制等。此外,还可能因为过多的并发请求而导致系统瘫痪。为解决这个问题,实际代码中,常常会在JSP初始化时保证只建立一个单独的数据库连接,这样,虽然可以消除并发问题,但由于所有执行JSP实例的线程都使用一个物理数据库连接,所有通过此连接的请求都被串行执行,因此,当多个并发请求到达服务器时,只有一个请求被处理,其余请求被较低层次的套接字和网络协议封锁。而大多数低层次的封锁机制与缓冲器的大小有关。这样的处理方法就可能导致过载时资源耗尽,系统崩溃。只有在轻载的情况下,该方法才允许一些底层的并发执行,因此这种方法并不能从根本上解决问题。此外,对于Web程序来讲,即使在某一较短的时间段内,其操作请求数也远远不是一两次,而是数十次,甚至上百次。在大型Web应用中,存在众多的JSP页面的情况下,一方面要求JDBC驱动程序能支持众多的连接;另一方面仍存在下列问题:当某JSP页面用户访问很少时,让其长时间占据一个连接,会导致系统资源的浪费。相反,在某JSP页面用户访问频繁时,会出现过多用户只能共享同一个连接的情况,这必然会引起响应速度缓慢。如果有一种方法能让JSP或Servlet应用能动态复用已建立的连接,一方面不用每次访问数据库时都建立新的连接,另一方面只在必要时才取得连接,从而能避免系统资源的不合理分配,同时系统性能也得到了保证。这正是连接池所提供的功能。3数据库连接池3.1基本原理顾名思义,连接池技术就是预先建立一些连接放置于内存中以备使用,当程序中需要建立数据库连接时,并不需要直接向数据库连接器发出请求,而只需要从数据库连接池中取得所需要的连接;当应用程序使用完一个连接,并不从物理上关掉连接,而是将连接还回到连接池。图2为应用程序请求数据库连

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值