java数据库连接池
编写标准的数据源 (规范)#
Java 为数据库连接池提供了公共的接口:javax.sql.DataSource
,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!
常见的第三方连接池如下:
- C3P0 是一个开源的 JDBC 连接池,它实现了数据源和 JNDI 绑定,支持 JDBC3 规范和 JDBC2 的标准扩展。C3P0 是异步操作的,所以一些操作时间过长的 JDBC 通过其它的辅助线程完成。目前使用它的开源项目有 Hibernate,Spring 等。C3P0 有自动回收空闲连接功能
- 阿里巴巴 - 德鲁伊 druid 连接池:Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和 SQL 解析器组成。该项目主要是为了扩展 JDBC 的一些限制,可以让程序员实现一些特殊的需求。
- DBCP(DataBase Connection Pool) 数据库连接池,是 Apache 上的一个 Java 连接池项目,也是 Tomcat 使用的连接池组件。dbcp 没有自动回收空闲连接的功能。
C3P0 连接池#
使用步骤
- 导入 c3p0-0.9.1.2.jar
- 拷贝配置文件到 src 目录
- 创建连接池 (配置文件自动读取的)
- 编写配置文件 c3p0-config.xml
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day19</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
</default-config>
</c3p0-config>
c3p0 连接池常用的配置参数:
参数 | 说明 |
---|---|
initialPoolSize | 初始连接数 |
maxPoolSize | 最大连接数 |
checkoutTimeout | 最大等待时间 |
maxIdleTime | 最大空闲回收时间 |
初始连接数
:刚创建好连接池的时候准备的连接数量最大连接数
:连接池中最多可以放多少个连接最大等待时间
:连接池中没有连接时最长等待时间最大空闲回收时间
:连接池中的空闲连接多久没有使用就会回收
编写 Java 代码
/**
* C3P0 连接池的工具类
*
*/
public class C3P0Utils {
//1. 创建一个 C3P0 的连接池对象(会自动读取 src 目录下的 c3p0-config.xml, 所以不需要我们解析配置文件)
public static DataSource ds = new ComboPooledDataSource();
//2. 提供 从连接池中 获取连接对象的方法
public static Connection getConnection() throws SQLException {
Connection conn = ds.getConnection();
return conn;
}
//3. 提供 获得数据源 (连接池对象) 的方法
public static DataSource getDataSource(){
return ds;
}
}
Druid 连接池#
Druid 是阿里巴巴开发的号称为监控而生的数据库连接池,Druid 是国内目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池。Druid 已经在阿里巴巴部署了超过 600 个应用,经过一年多生产环境大规模部署的严苛考验。如:一年一度的双十一活动,每年春运的抢火车票。
Druid 的下载地址:https://github.com/alibaba/druid
DRUID 连接池使用的 jar 包:druid-1.1.16.jar
Druid 连接池工具类编写#
步骤:
- 导入 DRUID jar 包
- 拷贝配置文件到 src 目录
- 根据配置文件 创建连接池对象
- 从连接池对象获得连接
实现:
创建 druid.properties, 放在 src 目录下
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day19
username=root
password=root
编写 Java 代码
/**
* 阿里巴巴的连接池 Druid 工具类
*/
public class DruidUtils {
/*
1. 加载 druid.properties 配置文件
2. 创建 Druid 连接池对象
3. 提供 获得 连接池对象的方法
4. 提供 从连接池中 获取连接对象 Connection 的 方法
*/
public static DataSource ds = null;
static {
try {
//1. 加载 druid.properties 配置文件
InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
Properties prop = new Properties();
prop.load(is);
//2. 创建 Druid 连接池对象
ds = DruidDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
3. 提供 获得 连接池对象的方法
*/
public static DataSource getDataSource(){
return ds;
}
/*
4. 提供 从连接池中 获取连接对象 Connection 的 方法
*/
public static Connection getConnetion() throws SQLException {
Connection conn = ds.getConnection();
return conn;
}
}