基本思想
- 为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
- 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
- 最小数据库连接数:数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。
- 最大数据库连接数:限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
优点
- 资源重用
由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。 - 更快的系统反应速度
数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间 - 新的资源分配手段
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源 - 统一的连接管理,避免数据库连接泄露
在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露
使用DBCP连接池
1.直接连接
// 1.创建DBPC数据源实例
BasicDataSource bds = null;
bds = new BasicDataSource();
// 2.设置数据库连接使用
bds.setUsername("root");
bds.setPassword("root");
bds.setUrl("jdbc:mysql://127.0.0.1:3306/test1");
bds.setDriverClassName("com.mysql.jdbc.Driver");
// 3.指定数据库连接池属性
// 3.1.设置初始连接数
bds.setInitialSize(10);
// 3.2.指定最大连接数,同一时刻向数据库申请的链接数和空闲的最大数
bds.setMaxTotal(50);
// 3.3.指定最小链接数:在数据库连接池中保存的最小的空闲连接的数量
bds.setMinIdle(5);
// 3.4.等待分配连接的最长时间,单位毫秒,超出则报异常
bds.setMaxWaitMillis(1000 * 5);
//4.从数据库获取连接
Connection conn = bds.getConnection();
2.工厂方式连接
String fileName = "dbcp.properties";
Properties properties = new Properties();
InputStream is = JDBCtest.class.getClassLoader().getResourceAsStream(fileName);
properties.load(is);
BasicDataSource bds = BasicDataSourceFactory.createDataSource(properties);
Connection conn = bds.getConnection();
注:数据库连接池初始化一次
private static DataSource dataSource = null;
static { dataSource = BasicDataSourceFactory.createDataSource(properties);}
conn关闭时并不是真的关闭,而是归还给数据库连接池
网友评论