基于java数据库连接池的研究毕业论文(编辑修改稿)内容摘要:

织的,可共享的数据集合。 数据库包含关系数据库,面向对象数据库及新兴的 XML数据库等多种,目前应用最广泛的是关系数据库,若在关系数据库基础上提供部分面向对象数据库功能的对象关系数据库。 在数据库技术的早期还曾经流行过层次数据库与网状数据库,但这两类数据库目前已经极少使用。 数据库连接池的基本原理 建立 “ 缓冲存储池 ” ,是数据库连接池的基本设计思想。 这种技术类似于CPU中的 Cache 技术,将预先设定好的数据库连接放入该缓冲池中,当要建立数据库连接操作时,便从池中取出一个连接,使用完毕后再将其放回。 这样就达到了连接复用的目的,应用程序重复使用一个数据库连接,在多层结构 的应用程序中通过连接池技术可以使系统的性能明显得到提到。 最为关键的是,该方法避免了对数据库连接的频繁建立、关闭,减小了系统开销,提高了响应速度。 我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。 更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量,使用情况,为系统开发,测试及性能调整提供依据。 数据库连接池属于应用程序对底层的调用,用户并发访问应用程序时会提交访问请求,然后通过线程来处理这些请求,并向连接池申请一个对数据库操作的连接,操作完毕后将连接释放。 应用程序调用连接池 连接的基本工 作原理如下图所示: 基于以上原理,连接池的建立会在后面章节中做具体描述。 为了方便理解,连接池以 JSP页面形式将最大连接数的设置、连接池的使用、超时等待、连接池的关闭等情况展示出来,给用户一个更为直观的感受。 连接的调用原理如下图所示: 从图中可以看出当程序 (JSP. Servlet. Java Bean) 中需要数据库连接时,只需从内存中取出一个来,并将这个取得的连接加入 Vector 中,而不用新建连接;使用完毕后放回内存中,并将 Vector 中的已用连接删除。 2. 3 连接池中的关键技术 连接池的分配与释放 连接池的分配与释放技术对系统的性能有很大的影响。 合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。 对于连接的管理。 每当用户请求一个连接时,系统首先检查连接池内有没有空闲连接。 如果有就把建立时间最长 (通过容器的顺序存放实现 )的个连 接分配给他 (实际是先做连接是否有效的判断,如果可用就分配给用户,若不可 用就把这个连接删掉,重新检测是否还有连接 );如果检查到当前所开连接池没有达到连接池所允许的最大连接数 (maxconn),就新建一个连接,如果已经达到,就等待一定的时间 (timeout)。 如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间超过预定时间 timeout,则返回空值(null) 系统对已经分配出去正在使用的连接只做计数。 连接池的维护 数据库连接池到底要放置多少个连接,这是个配置策略。 为了使系统的性能达到最佳状态,连接池中的连接数的设定显得尤为重要,我们采用设置最大连接数 (maxconn)和最小连接数 (minconn)的方式来解决这一问题。 所谓最大连接数,即连接池中 允许连接的最大数目,然后,最大连接数的设定要通过具体的应用需求来给出一个连接池可以承受的最大连接数目的最佳点。 如果应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中,等待其他连接的释放后再来调用一空闲连接 (freeconn),这样可能会影响部分对数据厍的操作。 所谓最小连接数,即应用启动前,已经预先创建好的连接数。 无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。 如果最小连接数过大,么系统启动过程将变慢,若应用程序对数据库的访问量不大,过多的数据库连接资源将被 浪费,但是系统启动后响应更快;如果过小系统启动将加快,但是最初使用的用户会因为连接池中没有足够的连接而会发送一个新的数据库连接请求,将不可避免的延缓执行速度。 3 系统总体设计思想及方案 数据库连接池技术的设计思想非常简单,先将数据库连接作为对象存储在一个 Vector 对象中, Vector 类可以实现可增长的对象 “ 数组 ”。 Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。 这里主要包含使用的连接 (nowconnections)和未使用的连接(freeconnections) 两个 Vector 类创 建的对象,创建 Vector 对象的方法如下 : public DBConnectionpool(vector connections) { freeconnections = new Vectoro()。 nowconnections = new Vector()。 } 当外部程序向数据库申请建立连接后系统会调用 ()方法,此时已用连接计数器加 1,相应的,调用 ()方法 ,此时空闲连接计数器减 1,对于这样的引用计数法将会在后面的章节中具体 描述。 这样,不同的数据库访问请求就可以共享这些连接,并通过复用这些已经建立的数据库连接,克服传统开发模式对数据库操作的缺点。 另外,采用超时判断 (timeout)机制,等待应用程序对连接的释放或者调用 ()方法主动释放连接,能极大地节省系统资源和用户等待时间。 而实现连接池时,当应用程序调用 ()试图去关闭数据库连接 时,这时需要有一个通告给连接池实现模块,通告对当前的数据库物理连接 (DBConnectionPool 对象 )进行重用。 为了使连接池实现模块能得到这种 “ 通告 ” ,连接池实现模块必须实现 ConnectionEventListener 接口 ,而且同时需要注册成为DBConnectionPool 对象的监听者。 连接池实现模块接受到此通告后,不是真正意义上的物理奖闭、而是将 DBConnectionPool 对象返回到池中进行重用。 从上面的介绍,可以看出连接池技术的关键就是其自身的管理机制,结合连接池工作 的基本原理,通 过下图展现出一个连接池系统的总体设计框架。 连接池中的关键类设计 一个连接池应用的设计,需要几个关键部分作为支撑,其中最为重要 的是 DBConnectionPool 类和 DBConnectionManager 类,他们对连接的建立、管理、释放起决定性作用。 大体作用列举如下: DBConnectionpool 类 ,该类负责从连接池获取 (或创建 )连接、将连接返回给连接池、空闲连接的超时等待、系统关闭时释放所有资源并关闭所有连接。 类 ,该类 负责通过上下文环境读取配置文件后装载和注册 JDBC 驱动、数据库名等。 DBConnection Manager 类,该类负责按预先指定的最大连接 池数连初始化连接池、创建 DBConnectionpool 对象 所有的连接客户退出后,关闭全部连接。 属性文件,该文件中包含了数据库驱动(DriverName)、数据库 URL、数据库表空间名 (User)、表空间密码 (Passwold)、连接池最大连接数 (maxconnections) 即为应用程序对连接池中的连接的调用和释放,应用程序退出后 连接池的关闭。 将以上 5个部分串连起来,即是本连接池的简单设计流程。 首先应用程序向连接池申请连接,就需要通过 DBConnectionpool 类, DBConnectionManager 类对连接池初始化并且还需要 Datasourceproviderservlet 类的帮助读取 西 es文件中的属性,加载和注册 JDBC 驱动,数据库名等,连接池才能初始化成功。 之后通过 DBConnectionPool 类监视,管理应用程序调用,释放的数据库连接,并通过该类的 cp对象将连接使用情况反映在页面上。 连接池管理程序得到某个连接,而其他线程就不会得到这个数据库连接了,此线程使用结束后,该线程将连接交还给连接池管理程序,以分配给其他等待连接的请求 线程。 这里连接池充分利用 Java 的线程同步机理,使当前服务线程处于等待状态,直至有空闲的连接出现。 最后当应用程序退出时,通过 DBConnectionManager类负责连接池的关闭。 连接池中的管理机制 应用程序开发中“三分技术、七分管理”的思想在连接池的配置中同样得 以体现,如何从连接池中取得连接,何时释放 连接、如何释放连接等问题还需要为连接池配置更为复杂的管理机制,连接池流程的管理如下图所不,这些属性定义了连接池与其中每个连接的有效状态值。 连接池的自我管理,实际上就是通过定时的对每个连接的状态、连接的数量进行判断而进行相应操作。 事务处理 前面讨论的是关于使用数据库连接进行普通的数据库访问。 对于事务处理,情况就变得比较复杂。 因为事务本身要求原则性的保证,此时就要求对于数据库的操作符合要么全部完成,要么什么都不做。 如果简单的采用上述的连接复用的策略,就会发生问题,因为没有办法控制属于同一个事务的多个数据库操作方法的动作,可能这些数据库操作是在多个连接上进行的,并且这些连接可能被其他非事务方法复用。 Connectio 日本身具有提供了对于事务的支持,可以通过设置 Connection的 Automit属性为 false,显式的调用 mit或 roHback 方法来实现。 但是要安全、高效的进行连接复用,就必须提供相应的事务支持机制。 方法是:采用显式的事务 支撑方法,每一个事务独占一个连接。 这种方法可以大大降低对于事务处理的复杂性,并且又不会妨碍连接的复用。 连接管理服务提供了显式的事务开始结束 (mit 或「 o11back)声明,以及一个事务注册表,用于登事务发起者和事务使用的连接的对应关系,通过该表,使用事务的部分和连接管理部分就。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。