数据库连接池

sunwe1987

贡献于2016-02-28

字数:0 关键词: 数据库连接池

MR.ELIVS 数据库连接池 访问数据库的一般过程: 装载驱动--建立连接—创建 statement—执行 sql 语句—处理结果集--关闭连接释放资源 存在问题: 1>每一次请求都要建立一次数据库连接 2>对于每一次数据库连接使用结束后都要关闭 3>这种开发不能控制被创建的连接对象数。 问题的根源在于对数据库连接的低效管理 如果数据库同时有 100 个用户来访问要采取什么技术解决? > 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放 入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使 用完毕之后再放回去。 > 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现 有的数据库连接,而不是重新建立一个。 > 数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库 连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连 接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定 了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连 接数量时,这些请求将被加入到等待队列中。 > 数据库连接池的工作原理 MR.ELIVS > 连接池有什么优点? > 资源重用: 由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系 统消耗的基础上,另一方面也增加了系统运行环境的平稳性。 > 更快的系统反应速度 数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。 此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避 免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间 > 新的资源分配手段 对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实 现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源 > 统一的连接管理,避免数据库连接泄露 在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用 连接,从而避免了常规数据库连接操作中可能出现的资源泄露 DBCP 数据源 > DBCP 是 Apache 软件基金组织下的开源连接池实现,该连接池依赖该组织下的另 一个开源系统:Common-pool. 如需使用该连接池实现,应在系统中增加如下两个 jar 文件: • Commons-dbcp.jar:连接池的实现 • Commons-pool.jar:连接池实现的依赖库 > 数据源和数据库连接不同,数据源无需创建多个,它是产生数据库连接的工厂,因 此整个应用只需要一个数据源即可。 > 当数据库访问结束后,程序还是像以前一样关闭数据库连接:conn.close(); 代码并 没有关闭数据库的物理连接,它仅仅把数据库连接释放,归还给了数据库连接池。 Dbcp.propertyes 配置说明 #使用的 jdbc 驱动类名 driverClassName=com.mysql.jdbc.Driver # 建立连接的url url=jdbc:mysql://localhost:3306/test username=root password=root #初始化连接:连接池启动时创建的连接数量 initialSize=3 #最大活动连接数:连接池在同一时间能够分配的最大连接值 非正数表示不限制 maxActive=123 #最大空闲数:允许保持空闲状态的最大连接数量超过的空闲连接将被释放负数表示不限制 maxIdle=3 #最小空闲数:允许保存空闲状态的最小连接数量低于这个数量会创建新的连接设置为0 #则不创建 minIdle=2 #最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间超过时间则会跑出 #异常,-1为表示无限等待 maxWait=50000 MR.ELIVS 具体代码如下: package com.tarena.util; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; /** * 数据库工具类 */ public class DBUtil { private static DataSource ds; static { Properties props = new Properties(); try { props.load(DBUtil.class.getClassLoader().getResourceAsStream( "dbcp.properties")); ds = BasicDataSourceFactory.createDataSource(props); } catch (Exception e) { e.printStackTrace(); } } /** * 获取db连接 * @return db连接对象 connection */ public static Connection getConnection() { try { if (ds != null) { return ds.getConnection(); } } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 关闭db连接 * @param conn * db连接对象 */ public static void closeConnection(Connection conn) { MR.ELIVS try { if (conn != null && !conn.isClosed()) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } dbcp.properties 配置文件如下 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username=root password=root initialSize=3 #最大连接数 maxActive=123 #最大空闲数 maxIdle=3 #最小空闲数 minIdle=2 #最大等待时间 maxWait=50000

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档