ImageVerifierCode 换一换
格式:DOC , 页数:6 ,大小:33KB ,
资源ID:46607      下载积分:5 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenkunet.com/d-46607.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java中数据库连接池原理机制的详细讲解.doc)为本站会员(凯文文)主动上传,文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文库网(发送邮件至13560552955@163.com或直接QQ联系客服),我们立即给予删除!

Java中数据库连接池原理机制的详细讲解.doc

1、连接池的基本工作原理 1、基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量?使用情况,为系统开发

2、?测试及性能调整提供依据。 2、服务器自带的连接池 JDBC 的 API 中没有提供连接池的方法。一些大型的 WEB 应用服务器如 BEA 的 WebLogic 和IBM 的 WebSphere 等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。 连接池关键问题分析 1、并发问题 为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为 Java 语言自身提供了对并发管理的支持,使用 synchronized 关键字即可确保线程是同步的。使用方法为直接在类方法前面加上 synchronized 关键字,如: public synchr

3、onized Connection getConnection() 2、多数据库服务器和多用户 对于大型的企业级应用,常常需要同时连接不同的数据库(如连接 Oracle 和 Sybase)。如何连接不同的数据库呢?我们采用的策略是:设计一个符合单例模式的连接池管理类,在连接池管理类的唯一实例被创建时读取一个资源文件,其中资源文件中存放着多个数据库的 url 地址()?用户名()?密码()等信息。如tx.url=172.21.15.123:5000/tx_it,tx.user=yang,tx.password=yang321。根据资源文件提供的信息,创建多个连接池类的实例,每一个实例都是一个特定

4、数据库的连接池。连接池管理类实例为每个连接池实例取一个名字,通过不同的名字来管理不同的连接池。 对于同一个数据库有多个用户使用不同的名称和密码访问的情况,也可以通过资源文件处理,即在资源文件中设置多个具有相同 url 地址,但具有不同用户名和密码的数据库连接信息。 3、事务处理 我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-ALL-NOTHING”原则,即对于一组 SQL 语句要么全做,要么全不做。 在 Java 语言中,Connection 类本身提供了对事务的支持,可以通过设置 Connection 的AutoCommit 属性为 false,然后显式的调用 commit

5、或 rollback 方法来实现。但要高效的进行 Connection 复用,就必须提供相应的事务支持机制。可采用每一个事务独占一个连接来实现,这种方法可以大大降低事务管理的复杂性。 4、连接池的分配与释放 连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。 对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断,

6、如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间超过预定时间 timeout,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数,当使用完后再返还给空闲池。对于空闲连接的状态,可开辟专门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分配前检测的方法。 5、

7、连接池的配置与维护 连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minConn)和最大连接数(maxConn)来控制连接池中的连接。最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过反复测试,找到最佳点。 如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每

8、隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。 连接池的实现 1、连接池模型 本文讨论的连接池包括一个连接池类(DBConnectionPool)和一个连接池管理类(DBConnetionPoolManager)。连接池类是对某一数据库所有连接的“缓冲池”,主要实现以下功能:从连接池获取或创建可用连接;使用完毕之后,把连接返还给连接池;在系统关闭前,断开所有连接并释放连接占用的系统资源;还能够处理无效连接(原来登记为可用的连接,由于某种原因不再可用,如超时,通讯问题),并能够限制连接池中的连接总数

9、不低于某个预定值和不超过某个预定值。 连接池管理类是连接池类的外覆类(wrapper),符合单例模式,即系统中只能有一个连接池管理类的实例。其主要用于对多个连接池对象的管理,具有以下功能:装载并注册特定数据库的 JDBC 驱动程序;根据属性文件给定的信息,创建连接池对象;为方便管理多个连接池对象,为每一个连接池对象取一个名字,实现连接池名字与其实例之间的映射;跟踪客户使用连接情况,以便需要是关闭连接释放资源。连接池管理类的引入主要是为了方便对多个连接池的使用和管理,如系统需要连接不同的数据库,或连接相同的数据库但由于安全性问题,需要不同的用户使用不同的名称和密码。 2、连接池实现 下面给出连接

10、池类和连接池管理类的主要属性及所要实现的基本接口: 复制内容到剪贴板 代码:public class DBConnectionPool implements TimerListener private int checkedOut;/已被分配出去的连接数 private ArrayList freeConnections=new ArrayList();/容器,空闲池,根据/创建时间顺序存放已创建但尚未分配出去的连接 private int minConn;/连接池里连接的最小数量 private int maxConn;/连接池里允许存在的最大连接数 private String name;

11、/为这个连接池取个名字,方便管理 private String password;/连接数据库时需要的密码 private String url;/所要创建连接的数据库的地址 private String user;/连接数据库时需要的用户名 public Timer timer;/定时器 public DBConnectionPool(String name,String URL,String user,String password,int maxConn)/公开的构造函数 public synchronized void freeConnection(Connection con) /使

12、用完毕之后,把连接返还给空闲池 public synchronized Connection getConnection(long timeout)/得到一个连接, timeout 是等待时间 public synchronized void release()/断开所有连接,释放占用的系统资源 private Connection newConnection()/新建一个数据库连接 public synchronized void TimerEvent() /定时器事件处理函数 public class DBConnectionManager static private DBConnect

13、ionManager instance;/连接池管理类的唯一实例 static private int clients;/客户数量 private ArrayList drivers=new ArrayList();/容器,存放数据库驱动程序 private HashMap pools = new HashMap();/以 name/value 的形式存取连接池对象的名字及连接池对象 static synchronized public DBConnectionManager getInstance()/*如果唯一的实例 instance 已经创建,直接返回这个实例;否则,调用私有构造函数,创

14、建连接池管理类的唯一实例*/ private DBConnectionManager()/私有构造函数 ,在其中调用初始化函数 init() public void freeConnection(String name,Connection con)/释放一个连接, name 是一个连接池对象的名字 public Connection getConnection(String name)/从名字为 name 的连接池对象中得到一个连接 public Connection getConnection(String name,long time)/从名字为 name 的连接池对象中取得一个连接,t

15、ime 是等待时间 public synchronized void release()/释放所有资源 private void createPools(Properties props)/根据属性文件提供的信息,创建一个或多个连接池 private void init()/初始化连接池管理类的唯一实例,由私有构造函数调用 private void loadDrivers(Properties props)/装载数据库驱动程序 3、连接池使用 上面所实现的连接池在程序开发时如何应用到系统中呢?下面以 Servlet 为例说明连接池的使用。 Servlet 的生命周期是:在开始建立 servle

16、t 时,调用其初始化(init)方法。之后每个用户请求都导致一个调用前面建立的实例的 service 方法的线程。最后,当服务器决定卸载一个 servlet 时,它首先调用该 servlet 的 destroy 方法。 根据 servlet 的特点,我们可以在初始化函数中生成连接池管理类的唯一实例(其中包括创建一个或多个连接池)。如: 复制内容到剪贴板 代码:public void init() throws ServletException connMgr=DBConnectionManager.getInstance(); 然后就可以在 service 方法中通过连接池名称使用连接池,执行

17、数据库操作。最后在destroy 方法中释放占用的系统资源,如: 复制内容到剪贴板 代码:public void destroy() connMgr.release(); super.destroy(); 结束语 在使用 JDBC 进行与数据库有关的应用开发中,数据库连接的管理是一个难点。很多时候,连接的混乱管理所造成的系统资源开销过大成为制约大型企业级应用效率的瓶颈。对于众多用户访问的 Web 应用,采用数据库连接技术的系统在效率和稳定性上比采用传统的其他方式的系统要好很多。本文阐述了使用 JDBC 访问数据库的技术?讨论了基于连接池技术的数据库连接管理的关键问题并给出了一个实现模型。文章所给出的是连接池管理程序的一种基本模式,为提高系统的整体性能,在此基础上还可以进行很多有意义的扩展。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报