文章目录
- DBCP简介
- DBCP作用
- DBCP使用步骤
- DBCP详细学习
DBCP简介
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
DBCP作用
- 内存中开辟一个缓冲区
- 在缓冲区中创建对象(初始化个数)
- 当有客户端来申请该对象时,从缓冲区中获取一个对象
- 缓冲区有一个最小空闲数设置,(保证每一个客户端来时都能获取一个对象)
- 缓冲区有最大数量限制
- 当一个客户端释放对象时,缓冲区会回收该对象,让该对象处于等待状态
- 如果一个客户端申请对象时,没有空闲对象,则处于等待状态(最大超时时间)
DBCP使用步骤
- 导入jar包
- 创建主配置文件(放在src目录下)
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbcstudy
username = root
password = 123456
maxActive = 5
initialSize = 2
minIdle = 2
maxWait = 5000
- 测试
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.BasicDataSourceFactory;
public class TestDBCP {
private static DataSource ds;
static {
Properties p = new Properties();
InputStream inStream = TestDBCP.class
.getClassLoader()
.getResourceAsStream("dbcp.properties");
try {
p.load(inStream);;
ds = BasicDataSourceFactory.createDataSource(p);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException, InterruptedException {
Connection c = ds.getConnection();
System.out.println(c.hashCode());
System.out.println(ds.getConnection().hashCode());
System.out.println(ds.getConnection().hashCode());
System.out.println(ds.getConnection().hashCode());
System.out.println(ds.getConnection().hashCode());
new Thread() {
@Override
public void run() {
try {
Connection c = ds.getConnection();
System.out.println(c.hashCode());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
Thread.sleep(4000);
c.close();
}
}
DBCP详细学习
http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi