连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治
理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的
开销。
连接池原理
连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理
策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开
销。另外,由于对JDBC中的原始连接进行了封装,从而方便了数据库应用对于连接的使用(非凡是
对于事务处理),提高了开发效率,也正是因为这个封装层的存在,隔离了应用的本身的处理逻辑
和具体数据库访问逻辑,使应用本身的复用成为可能。连接池主要由三部分组成:连接池的建立、
连接池中连接的使用治理、连接池的关闭。下面就着重讨论这三部分及连接池的配置问题。
1.1 连接池的建立
应用程序中建立的连接池其实是一个静态的。所谓静态连接池是指连接池中的连接在系统初始化时
就已分配好,且不能随意关闭连接。Java中提供了很多容器类可以方便的构建连接池,如:Vector
、Stack、Servlet、Bean等,通过读取连接属性文件 Connections.properties与数据库实例建立连
接。在系统初始化时,根据相应的配置创建连接并放置在连接池中,以便需要使用时能从连接池中
获取,这样就可以避免连接随意的建立、关闭造成的开销。
1.2 连接池的治理
连接池治理策略是连接池机制的核心。当连接池建立后,如何对连接池中的连接进行治理,解决好
连接池内连接的分配和释放,对系统的性能有很大的影响。连接的合理分配、释放可提高连接的复
用,降低了系统建立新连接的开销,同时也加速了用户的访问速度。下面介绍连接池中连接的分配
、释放策略。
连接池的分配、释放策略对于有效复用连接非常重要,我们采用的方法是一个很有名的设计模式:
Reference Counting(引用记数)。该模式在复用资源方面应用的非常广泛,把该方法运用到对于
连接的分配释放上,为每一个数据库连接,保留一个引用记数,用来记录该连接的使用者的个数。
具体的实现方法是:
当客户请求数据库连接时,首先查看连接池中是否有空闲连接(指当前没有分配出去的连接)。假
如存在空闲连接,则把连接分配给客户并作相应处理(即标记该连接为正在使用,引用计数加1)。
假如没有空闲连接,则查看当前所开的连接数是不是已经达到maxConn(最大连接数),假如没达到
就重新创建一个连接给请求的客户;假如达到就按设定的maxWaitTime(最大等待时间)进行等待,
假如等待maxWaitTime后仍没有空闲连接,就抛出无空闲连接的异常给用户。
当客户释放数据库连接时,先判定该连接的引用次数是否超过了规定值,假如超过就删除该连接,
并判定当前连接池内总的连接数是否小于 minConn(最小连接数),若小于就将连接池布满;假如
没超过就将该连接标记为开放状态,可供再次复用。可以看出正是这套策略保证了数据库连接的有
效复用,避免频繁地建立、释放连接所带来的系统资源开销。
1.3 连接池的关闭
当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给
数据库(即关闭所有数据库连接),这与连接池的建立正好是一个相反过程。
1.4 连接池的配置
数据库连接池中到底要放置多少个连接,才能使系统的性能更佳,用minConn和maxConn来限制。
minConn是当应用启动的时候连接池所创建的连接数,假如过大启动将变慢,但是启动后响应更快;
假如过小启动加快,但是最初使用的用户将因为连接池中没有足够的连接不可避免的延缓了执行速
度。因此应该在开发的过程中设定较小minConn,而在实际应用的中设定较大minConn。maxConn是连
接池中的最大连接数,可以通过反复试验来确定此饱和点。为此在连接池类ConnectionPool中加入
两个方法getActiveSize()和 getOpenSize(),ActiveSize 表示某一时间有多少连接正被使用
,OpenSize表示连接池中有多少连接被打开,反映了连接池使用的峰值。将这两个值在日志信息中
反应出来, minConn的值应该小于平均ActiveSize,而maxConn的值应该在activeSize和OpenSize之
间
数据库连接池实现原理
数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获
取和返回方法。如:
外部使用者可通过getConnection 方法获取连接,使用完毕后再通过releaseConnection 方法将连
接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。
数据库连接池技术带来的优势:
1. 资源重用
由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基
础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)
。
2. 更快的系统响应速度
数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。此时连接的初始化
工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放
过程的时间开销,从而缩减了系统整体响应时间。
3. 新的资源分配手段
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技
术,几年钱也许还是个新鲜话题,对于目前的业务系统而言,如果设计中还没有考虑到连接池的应
用,那么…….快在设计文档中加上这部分的内容吧。某一应用最大可用数据库连接数的限制,避免
某一应用独占所有数据库资源。
4. 统一的连接管理,避免数据库连接泄漏
在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而
避免了常规数据库连接操作中可能出现的资源泄漏。
分享到:
相关推荐
java实现JDBC数据库连接池的原理,里面有oracle驱动jar包,以及代码的阅读步骤
文章通过介绍、分析数据库连接池工作的基本原理,了解目前流行的WEB服务器在数据库连接池方面的使用现状后,总结了一些数据库连接池开发程序中容易忽略的问题。并在学习掌握了实现连接池的关键技术后给出了一个较为...
基于Java的数据库连接池的研究与实现,谢俊,陈明,介绍了基于Java的数据库的访问机制,对实际应用中出现的问题进行了分析,提出了数据库连接池技术的解决方案,分析了连接池的工作原理,�
java_jdbc数据库连接池总结 有讲原理,不错
连接池类是对某一数据库所有连接的“缓冲池”,主要实现以下功能:从连接池获取或创建可用连接;使用完毕之后,把连接返还给连接池;在系统关闭前,断开所有连接并释放连接占用的系统资源;还能够处理无效连接(原来...
NULL 博文链接:https://skyuck.iteye.com/blog/524561
文章通过介绍、分析数据库连接池工作的基本原理,了解目前流行的WEB服务器在数据库连接池方面的使用现状后,总结了一些数据库连接池开发程序中容易忽略的问题。并在学习掌握了实现连接池的关键技术后给出了一个较为...
文章通过介绍、分析数据库连接池工作的基本原理,了解目前流行的WEB服务器在数据库连接池方面的使用现状后,总结了一些数据库连接池开发程序中容易忽略的问题。并在学习掌握了实现连接池的关键技术后给出了一个较为...
文章通过介绍、分析数据库连接池工作的基本原理,了解目前流行的WEB服务器在数据库连接池方面的使用现状后,总结了一些数据库连接池开发程序中容易忽略的问题。并在学习掌握了实现连接池的关键技术后给出了一个较为...
java动态代理实现数据库连接池的详细原理讲解
随附的源代码是一个实用的、经过优化的数据库连接池实现,它演示了如何在JSP应用中集成连接池,以减少数据库连接开销和提升性能。源码可能包括了配置示例、使用说明和一些高级功能,如连接池监控和管理工具,帮助...
Java应用程序访问数据库的基本原理 在Java语言中,JDBC(Java ...JDBC提供两种API,分别是面向开发人员的API和面向底层的JDBC驱动程序API,底层主要通过直接的JDBC驱动和JDBC-ODBC桥驱动实现与数据库的连接。
基于Java的数据库连接池组件,李艳生,,首先讲述了数据库连接池的工作原理及程序流程,然后用Java实现了数据库连接池组件,最后说明了该组件的使用方法。
文章简单介绍了JDBC数据库连接原理和数据库连接池工作原理,结合其原理和Java应用系统存在的问题,提出基于JDBC的数据库连接池实现连接及语句分享的实现方案,其目的是在连接数不断增加的情况下,提高应用系统对用户请求...
用java代码详细描述了连接池的原理实现,注释也非常详细
该文档详细介绍了数据库连接池的原理,并且详细的实现了数据库连接池的创建过程
对于一个简单的数据库引用,用于对数据库的访问不是很频繁。这时可以简单的在需要访问数据库是,创建一个连接,用完后关闭它,这样... 数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露
基于Web的SCADA系统中数据库连接池的研究与实现,周威,陈剑云,本文对基于Web的SCADA系统中出现的问题进行了分析, 提出了数据库连接池技术的解决方案, 分析了连接池的工作原理,并对实现过程中出现��
一、实验目的: ...(5)理解数据库连接池的基本原理和思想,学会在tomcat服务器中配置数据库连接池,并掌握从连接池中获取连接的基本方法。 (6)初步理解数据访问层的基本设计方法,理解web的分层架构。
其实ftp连接池跟数据库连接池的原理是差不多的,不同的是ftp连接池有个连接时间的限制,如果你没设置的话,它的默认连接服务器的时间是0,所以我们要合理的设置它的服务器的时间,ftp.setConnectTimeout(5000);...