数据库连接池
1. 概念
数据库连接池用来管理 Connection, 这样可以重复使用 Connection. 有了池, 所以我们就不用自己来创建
Connection 对象, 而是通过池来获取 Connection 对象. 当使用完 Connection 后, 调用 Connection
的 close() 方法也不会真的关闭 Connection, 而是把 Connection "归还"给池.
2. 连接池特点
- 连接池必须实现 javax.sql.DataSource 接口(JavaSE 文档)
- 连接池返回的 Connection 对象, 它的 close() 方法是把连接归还给池!! 而不是关闭连接.
2. DBCP 连接池
2.1 所需 jar 包
- commons-dbcp;
- commons-pool;
- mysql-connector-java;
2.2 使用步骤
- 创建连接池对象;
- 配置四大参数;
- 配置池参数;
- 得到连接对象;
// 创建连接池对象
BasicDataSource dataSource = new BasicDataSource();
// 配置四大参数
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb1");
dataSource.setUsername("root");
dataSource.setPassword("root");
// 配置池参数 (可选)
dataSource.setMaxTotal(20); // 最大连接数
dataSource.setMinIdle(3); // 最小空闲连接
dataSource.setMaxWaitMillis(1000); // 最长等待时间
// 得到连接对象
Connection con = dataSource.getConnection();
2.3 原理
DBCP 连接池内部使用四大参数创建了连接对象! 即 MySQL 驱动提供的 Connection 对象.
连接池对 MySQL 的连接对象进行了装饰, 只对 close() 方法进行了增强!!
装饰之后的 Connection 的 close() 方法, 用来把当前连接归还给池!!而不是销毁连接.
3. c3p0 连接池
3.1 所需 jar 包
- c3p0-0.9.2
- mchange-commons
- mysql-connector-java
// 创建连接池对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 对池进行四大参数的配置
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb1");
dataSource.setUser("root");
dataSource.setPassword("root");
// 池参数配置 (可选)
dataSource.setAcquireIncrement(5); // 每次的增量
dataSource.setInitialPoolSize(20); // 初始化连接数
dataSource.setMinPoolSize(2); //最少连接数
dataSource.setMaxPoolSize(50); //最多连接数
// 得到连接对象
Connection con = dataSource.getConnection();
3.2 c3p0 配置文件
- c3p0 也可以指定配置文件, 而且配置文件可以是 properties, 也可以是 xml.如果是 xml, 配置文件名
必须为 "c3p0-config.xml",并且必须放在 "src" 目录下.
// c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</default-config>
</c3p0-config>
// 使用配置文件中的默认配置信息,得到 Connection
ComboPooledDataSource dataSource = new ComboPooledDataSource();
Connection con = dataSource.getConnection();
参考资料: