些连接组成一个池.每次应用
程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接,使用 完后,不再关闭,而是直接将该连接归还池,使用连接池,可大大提高系统运行效率. 》数据库连接池介绍 》 对于共享资源的情况,有一个通用的设计模式--资源池(Resource Pool),用于解决资源的频繁请求、 释放所造成的性能下降.为解决数据库连接的这种频繁性,JDBC2.0 规范引入了数据库连接池技术,实际上, 数据库连接池是 Connection 对象的工厂,常用参数有: @数据库的初始连接数 @连接池的最大连接数 @连接池每次增加的连接数
》连接池的
工作示意图 {JDBC 标准的 API 并没有提供连接池的实现,仅仅提供了 DataSource 接口具体 的实现有一些厂商提供} 》 连接池的分配与释放 @程序启动,分配初始化数目的连接,按需分配,用过归还、 超时归还,当申请时无或者达到指定的最小值, 按增量参数值分配新的连接 @为确保连接池中最小的连接数,通常有如下策略: :动态--定时检查连接池,一旦发现数量小于最小连接数,则补充相应的新连接,保证连接池正常运转 :静态--空闲连接不足时,
系统才检测是否达到最小连接 》连接池的实现 连接池通常包括连接池类(DBConnectionPool)和连接池管理类(DBConnectionPoolManager): 》 连接池类是某一数据库所有连接的缓冲池,主要实现功能:@从连接池获取或者创建可用连接,@使用完 毕,归还给池连接,@系统关闭前,断开所有连接并释放连接占用的资源,@处理无效连接,@限制池中连接的数 节目,介于最小值和最大值之间 》 连接池管理类是连接池类的包装类,该类采用单态模式
设计,保证系统中只有一个实例,主要用于管理 多个连接池对象,主要实现以下功能:@
注册数据库驱动程序,@根据配置文件,创建连接池对象,@命名、管理 连接池,@跟踪连接池的使用,需要时关闭并释放资源 :数据库连接池的管理是个难点,管理不当,造成系统开销过大,将成
为性能瓶颈.对于高并发的 WEB 应 用,采用连接池技术效率和稳定性比传统的连接方式要好的多 :并发问题--数据库必须考虑此
问题,对于并发,Java 语言提供管理并发的支持,使用 synchronized 关 键字可确保方法线程的安全.故,DataSource 的 getConnection 方法必须以该该关键字修饰 public synchronized Connection getConnection(); //保证线程安全
:事务处理--JDBC 的 Connection 本身通过设置 Connection 的 AutoCommit 属性为 false,提供对事务的 支持,然后,显式地调用 commit 或 rollback 方法提交或回滚事务. 连接池需要复用 connection,因此,必须提供相应的事务支持机制.考虑采用每个事务独占一个连接,此 法可降低事务管理复杂性. :多数据库服务器和多用户--JDBC 规范中,DataSource 具备同时连接不同数据库的能力,如同时连 oracle 和 sql server.此时,考虑使用 xml 配置文件来配置连接所需的相关信息.然后,提供一个 Singleton 模式的连接池管理类,该管理类每次启动时读取配置文件信息,创建多个连接池类的实例,每个实例对应一 个数据库连接池.连接池管理类实例命名每个连接池实例,通过不同的名称管理不同的连接池. 对于多个用户访问同一个数据库的情况,也可考虑使用
xml 配置文件. 》常见的数据库连接池 通常,没有必要自己实现连接池.商用应用服务器都有自己的连接池实现,如 WebLogic 和 WebSphere,其性能 和稳定性绝佳,即使没有商用应用服务器,也可使用开源的连接池.目前流行的有 2 个:@DBCP 连接 池 @C3P0 连接池 》DBCP 连接池 Appache 提供的开源实现,依赖于两个 jar 文件 @commons-dbcp-1.2.1.jar:连接池的实现 @commons-pool.jar:连接池实现的依赖库 Tomcat 的连接池正是采用该连接池实现的.连接该连接池,既允许与应用服务器整合使用,又可由应用 程序独立使用.下面的代码 DBConn 类通过 DBCP 获得数