DBCP数据源
DBCP 是 Apache 软件基金组织下的开源连接池实现,该连接池依赖该组织下的另一个开源系统:Common-pool. 如需使用该连接池实现,应在系统中增加如下两个 jar 文件:
1. Commons-dbcp.jar:连接池的实现
2. Commons-pool.jar:连接池实现的依赖库
Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
初次简单使用(先爽一把)
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class DBCP {
public static void main(String[] args) throws SQLException {
//1、创建DBCP数据源实例
BasicDataSource dataSource = new BasicDataSource();
//2、为数据源实例指定必要的属性
dataSource.setUsername("root");
dataSource.setPassword("123");
dataSource.setUrl("jdbc:mysql://localhost:3306/hubeiedu?useUnicode=true&characterEncoding=utf8");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
//3、指定数据源的一些可选的属性
//(1) 指定数据库连接池中初始化连接数的个数
dataSource.setInitialSize(10);
//(2) 指定最大的连接数:同一时刻可以同时向数据库申请的连接数
dataSource.setMaxActive(50);
//(3) 指定最小连接数:在数据库连接池中保存的最少的空闲连接的数量
dataSource.setMinIdle(5);
//(4) 等待数据库连接池分配链接的最长时间,单位为毫秒,超过该时间抛异常
dataSource.setMaxWait(1000 * 5);
//4、从数据源中获取数据库连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}打印出:

数据源和数据库连接不同,数据源无需创建多个,它是产生数据库连接的工厂,因此整个应用只需要一个数据源即可。
当数据库访问结束后,程序还是像以前一样关闭数据库连接:conn.close(); 但上面的代码并没有关闭数据库的物理连接,它仅仅把数据库连接释放,归还给了数据库连接池。
升级版
DBCP.java
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class DBCP {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
InputStream inputStream = new DBCP().getClass().getResourceAsStream("dbcp.properties");
properties.load(inputStream);
DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
Connection conn = dataSource.getConnection();
System.out.println(conn);
}
}
dbcp.properties
username=root
password=123
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hubeiedu?useUnicode=true&characterEncoding=utf8
initialSize=10
maxActive=50
minIdle=5
maxWait=5000
dbcp.proerties里面的属性就是简单版的dataSource.setXXX()后面的XXX的小写。
检测:
设置初始化连接数为5,最大连接数为5,最长等待时间为5秒

第六个等待五秒后报错

使用多线程释放

第五条打印后,等待三秒打印第六条

















