数据库连接池的研究与实现—毕业设计论文内容摘要:
序调用 ( )试图去关闭数据库连接时,这时需要有一个通告给连接池实现模块,通告对当前 的数据库物理连接( DBConnectionPool 对象)进行重用。 为了使连接池实现模块能得到这种 “ 通告 ” ,连接池实现模块必须实现 ConnectionEventListener 接口,而且同时需要注册成为 DBConnectionPool 对象的监听者。 连接池实现模块接受到此通告后, 不是真正意义上的物理关闭,而是 将 DBConnectionPool 对象返回到池中进行重用。 从上面的介绍,可以看出连接池技术的关键就是其自身的管理机制,结合连接池工作的基本原理,通过下图展现出一个连接池系统的总体设计框架。 图 3 总体设计框架 连接池中的关键类设计 一个连接池应用的设计,需要几个关键部分作为支撑,其中最为重要的是DBConnectionPool 类和 DBConnectionManager 类,他们对连接的建立、管理、释放起决定性作用。 大体作用列举如下: 建立数据库连接 GetConnection() CloseConnection() 第 7 页 共 22 页 一个 DBConnectionPool 类,该类负责从连接池获取 (或创建 )连接、将连接返回给连接池、 空闲连接的超时等待、 系统关闭时释放所有资源并关闭所有连接。 一个 DataSourceProviderServlet 类,该类负责通过上下文环境读取配置文件后装载 和注册 JDBC 驱动、数据库名等。 一个 DBConnectionManager 类,该类负责 按预先指定的最大连接池数连初始化 连接池 、创建 DBConnectionPool 对象 provider、当所有的连接客户退出后,关闭全部连接。 属性文件,该文件中包含了数据库驱动( DriverName)、数据库 URL、数据库表空间名( User)、表空间密码( Password)、连接池最大连接数( maxConnections)。 即为应用程序对连接池 中的连接 的调用 和释放 ,应用程序 退出后连接池的关闭。 将以上 5 个部分串连起来,即是本连接池的简单设计流程。 首先应用程序向连接池申请连接,就需要通过 DBConnectionPool 类、 DBConnectionManager类对连接池初始化,并且还需要 DataSourceProviderServlet 类的帮助读取 文件中的属性,加载和注册 JDBC 驱动、数据库名等,连接池才能初始化成功。 之后通过 DBConnectionPool 类监视、管理应用程序调用、释放的数据库连接,并通过该类的 cp 对象将连接使用情况反映在 页面上。 连接池管理程序得到某 个连接,而其他线程就不会得到这个数据库连接了,此线程使用结束后,该线程将连接交还给连接池管理程序,以分配给其他等待连接的请求线程。 这里连接池充分利用 Java 的线程同步机理,使当前服务线程处于等待 状 态, 直至 有空 闲的 连接 出现。 最 后 当应 用程 序退 出时 ,通 过DBConnectionManager 类负责连接池的关闭。 连接池中的管理机制 应用程序开发中“三分技术、七分管理”的思想在连接池的配置中同样得以体现,如何从连接池中取得连接,何时释放连接、如何释放连接等问题还需要为连接池配置更为复杂的 管理机制,连接池流程的管理如下图所示,这些属性定义了连接池与其中每个连接的有效状态值。 连接池的自我管理,实际上就是通过定时的对每个连接的状态、连接的数量进行判断而进行相应操作。 第 8 页 共 22 页 图 4 连接池的管理 事务处理 前面讨论的是关于使用数据库连接进行普通的数据库访问。 对于事务处理,情况就变得比较复杂。 因为事务本身要求原则性的保证,此时就要求对于数据库的操作符合要么全部完成,要么什么都不做。 如果简单的采用上述的连接复用的策略,就会发生问题,因为没有办法控制属于同一个事务的多个数据库操作方法的动作,可能这些数据库操作是在多个连接上进行的,并且这些连接可能被其他非事务方法复用。 Connection 本身具有提供了对于事务的支持,可以通过设置 Connection 的 AutoCommit 属性为 false,显式的调用 mit 或rollback 方法来实现。 但是要安全、高效的进行连接复用,就必须提供相应的事务支持机制。 方法是:采用显式的事务支撑方法,每一个事务独占一个连接。 这种方法可以大大降低对于事务处理的复杂性,并且又不会妨碍连接的复用。 定时触发 单个连接状态检查完毕 否 结束退出 第 9 页 共 22 页 连接管理服务提供了显式的事务开始、结束( mit 或 rollback)声明,以及一个事务注册表,用于登记事务发起者和事务使用的连接的对应关系,通过该表,使用事务的部分和连接管理部分就隔离开,因为该表是在运行时根据实际的调用情况动态生成的。 事务使用的连接在该事务运行中不能被复用。 在实现中,用户标识是通过使用者所在的线程来标识的。 后面的所有对于数据库的访问都是通过查找该注册表,使用已经分配的连接来完成的。 当事务结束时,从注册表中删除相应表项。 封装 从上面的论述可以看出,普通的数据库方法和事务方法对于连接的使用(分配、释放)是不同的,为了便于使用,对外提供一致的操 作接口,对连接进行了封装:普通连接和事务连接,并利用了 Java 中的强大的面向对象特性:多态。 普通连接和事务连接均实现了一个 DBConnection 接口,对于接口中定义的方法,分别根据自己的特点作了不同的实现,这样在对于连接的处理上就非常的一致了。 并发 为了使连接管理服务有更大的通用性,我们必须要考虑到多线程环境,即并发问题。 在一个多线程的环境下,必须要保证连接管理自身数据的一致性和连接内部数据的一致性,在这方面 Java 提供很好的支持( synchronized 关键字),这样就很容易使连接管理成为线程安全的。 对于并发访问, 所有的当前请求都将被连接池管理程序按顺序锁定。 对请求线程的锁定是通过应用程序代码进行的,且请求数量可以很大,不必担心超出缓冲容量限制。 一旦将连接交还给连接池,该连接将由连接池管理程序分配给其他锁定的请求。 当有很多数据库请求并超出了连接池中连接的数目时,只有先发出数据库请求的线程获得连接来访问数据库,其他连接暂时处于等待的锁定状态,当线程完成数据库操作并释放连接后,被释放的连接将按顺序由其他线程获得,这样就可以大大节省服务器的资源。 连接池的关闭 很多的连接池都要求用户通过其规定的方法获取数据 库的连接,这一点我们可以理解,毕竟目前所有的应用服务器取数据库连接的方式都是这种方式实现的。 但是另外一个共同的问题是,它们同时不允许使用者显式的调用()方法,而需要用其规定的一个方法来关闭连接。 这种做法有两个缺点: 第 10 页 共 22 页 第一:改变了用户使用习惯,增加了用户的使用难度。 使用者在用完数据库连接后通常是直接调用连接的 close 方法 来释放数据库资源。 第二:使连接池无法对之中的所有连接进行独占控制。 由于连接池不允许用户直接调用连接的 close 方法,一旦使用者在使用的过程中由于习惯问题直接关闭了数据库连接,那么连接池将无法正常维护所有连接的状态。 4 具体的设计流程和实现 连接池的建立 应用程序中建立的连接池其实是一个静态的。 所谓静态连接池是指连接池中的连接在系统初始化时就已分配好,且不能随意关闭连接。 Java 中提供了很多容器类可以方便的构建连接池,如: Vector、 Stack、 Servlet、 Bean 等,通过读取连接属性文件 与数据库实例建立连接。 (该属性文件中包含了连接数据库的 URL、数据库驱动、数据库表空间、数据库表空间密码、连接池最大连接数 )在系统初 始化时,根据相应的配置创建连接并放置在连接池中,这些对象作为系统可分配的自由连接,以后所使用的连接都是从连接池中获得,这样就避免了随意建立连接,关闭连接所带来的资源浪费。 连接池初始化如下: public DBConnectionPool(Vector connections) { FreeConnections = new Vector()。 nowConnections = new Vector()。 freeConnections = connections。 maxConnections = ()。 } 本连接池的建立使用输入流,通过上下文环境,读取配置文件( )里预先设置的参数,部分代码如下: public void contextInitialized(ServletContextEvent event) { Properties ps = new Properties()。 Vector connections = new Vector()。 ServletContext context = ()。 try { //使用输入流,读取配置文件里的各种参数 InputStream input = 第 11 页 共 22 页 getClass().getResourceAsStream(/)。 (input)。 ()。 url = (String) (url)。 user = (String) (user)。 passWord = (String) (passWord)。 DriverName = (String) (DriverName)。 maxConnections=(((String) (maxConnections)).trim(), 10)。 (user)。 //循环加入取得的连接到 Vector 中 for (int i = 0。 i maxConnections。 i++) { //调用下面的方法,取得数据库连接,并放入到 Vector中 (getConnection(url,user,passWord,DriverName))。 } } catch (Exception e) { ()。 } //放到服务器的上下文环境中 (CONNECTOR,new DBConnectionPool(connections))。 } 连接池初始化参数通过页面设置写入 文件中,如下图所示: 第 12 页 共 22 页 图 5 初始化连接池设置 连接池的管理 连接池管理策略是连接池机制的核心。 当 连接池建立后,如何对连接池中的连接进行管理,解决好连接池内连接的分配和释放,对系统的性能有很大的影响。 连接的合理分配、释放可提高连接的复用,降低了系统建立新连接的开销,同时也加速了用户的访问速度。 下面介绍连接池中连接的分配、释放策略。 连接池的分配、释放策略对于有效复用连接非常重要。 就一般情况而言,当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就删除该连接,并判断当前连接池内总的连接数是否小于 minConn(最小连接数),若小于就将连接池充满;如果没超过就将该连接标记为开放状态,可供再次复用。 可以看出正是这套策略保证了数据库连接的有效复用,避免频繁地建立、释放连接所带来的系统资源开销。 我们采用的方法是一个很有名的设计模式: Reference Counting(引用记数)。 该模式在复用资源方面应用的非常广泛,把该方法运用到对于连接的分配释放上,为每一个数据库连接,保留一个引用记数,用来记录该连接的使用者的个数。 具体的实现方法是: public synchronized Connection getConnection(int TimeOut) { Connection con = null。 if (() = 0) { (连接失败,由于数据库 连接 池中无可用 连接。 请等待 !)。 try { new DBConnectionManager().closeAll()。 } 第 13 页 共 22 页 catch (Exception ex) {。数据库连接池的研究与实现—毕业设计论文
相关推荐
(一)推荐教材 教材名称 主编姓名 出版社名称 出版日期 《塑 料成型工艺与 模具设计》 屈华昌 高等教育 出版社 2020 年 (二)推荐参考书 教材名称 主编姓名 出版社名称 出版日期 塑料成型工艺及模具设计 李德群 机械工业出版社, 1993 年 塑料模具设计 陈志刚 高等教育出版社 2020 年 制定 : 毛金 明 审稿:康剑莉 审定: 模具设计与制造专业指导委员会 13 《
目建设规划表 序号 项 目 名 称 完成 时间 负责人 资金投入 (万元 ) 2020年 2020年 1 校内实训基 地环境建设 花 峰 2 2 2 校内实训基地管理制度建设 —— 1 3 校内生产性实训基地校企合作机制建设 —— 1 4 开放式管理运行机制建设 —— 1 小 计 2 5 合 计 7 校外实训基地 ( 1)校外顶岗实习基地建设 根据专业培养目标要求,在榆次航天液压
.................................... 82 第七节 说明书、标签质量验收管理制度 ................................................................ 83 第八节 自检管理制度 .............................................................
本软件作为教学管理辅助设备,它的规模比较小,不需要保密技术;限定一个程序中某些区域的规约,给不同的模块分配不同的功能。 可维护性 本软件的组成程序为汉语成语设计语言,组构均较简单,直观意义上的较独立。 因此,基于电子化所构成的硬件的简单可维护的特点,决定了该软件的简单可维护性。 可转移、可转换性 可转移的环境是奔腾 13 16 兆内存以上;不可修改任何部分。 注释 本产品所拥有的属性十分重要
面。 GB1804M。 : 45调质(φ 70 65)。 第 22 页 产品工艺分析 零件 的数控加工工艺分析是编制数控程序中最重要而又极其复杂的环节,也是数控加工工艺方案设计的核心工作,必须在数控加工方案制定前完成。 一个合格的编程人员对数控机床及其控制系统的功能及特点,以及影响数控加工的每个环节都要有一个清晰、全面的了解,这样才能避免由于工艺方案考虑不周而可能出现的产品质量问题
结果如下面的四个表所示。 每个 表表示数据库中的一个表。 部门情况表: 7 个人信息表: 员工信息表: 用户登录表: 8 在此基础上输入数据完成表的创建。 第四章 人事管理系统设计原则与思想 随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企人事管理势在必行。 当前企业 信息管理系统正在从 CS/结构向 BS/结构转移,但是由于安全性等方面的因素,