源码位置commons-dbcp commons-dbcp 1.4
org.apache.commons.dbcpl包下
源码类public class BasicDataSource implements DataSource普通方法
//A类方法(数据库连接池内的连接,连接db的基本信息)
//设置驱动
public synchronized void setDriverClassName(String driverClassName)
//设置url 默认值null
public synchronized void setUrl(String url)
//设置账号 默认值null
public void setUsername(String username)
//设置密码 默认值null
public void setPassword(String password)
//B类方法(连接池内的连接数)
//初始化连接数 默认值0
public synchronized void setInitialSize(int initialSize)
//最小空闲连接数 默认值0
public synchronized void setMinIdle(int minIdle)
//最大空闲连接数 默认值8
public synchronized void setMaxIdle(int maxIdle)
//最大连接数 默认值8
public synchronized void setMaxActive(int maxActive)
//C类方法(连接池借出和客户端归还连接前的有效检查)
//最大等待时间 默认值-1
public synchronized void setMaxWait(long maxWait)
//池子借出连接前检查连接有效性,默认值true需改成false
public synchronized void setTestOnBorrow(boolean testOnBorrow)
//归还连接前检查连接有效性 默认值false
public synchronized void setTestOnReturn(boolean testOnReturn)
//检证sql 默认值null
public void setValidationQuery(String validationQuery)
//D类方法(空闲连接的检查)
//设置是否开启空闲连接巡测 默认值false
public synchronized void setTestWhileIdle(boolean testWhileIdle)
//设置对空闲连接巡测间隔时间 默认值-1
public synchronized void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis)
//设置每次巡测的空闲连接数 默认值3
public synchronized void setNumTestsPerEvictionRun(int numTestsPerEvictionRun)
//设置连接空闲时间 默认值30分钟
public synchronized void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis)
//E类方法(归还连接和预编译配置)
//归还连接
public synchronized void close()
//是否归还
public synchronized boolean isClosed()
//设置预编译 默认值false
public synchronized void setPoolPreparedStatements(boolean poolingStatements)
dbcp配置总结
代码一、B类方法配置分析
B1==>initialSize minIdle maxIdle maxActive 配置全部相等
B2==>initialSize minIdle maxIdle maxActive 配置不相等
n=10 20 30 40
==>并发==>并发>n时:
1、流量增大情况
会出现池内连接不够用,连接池要现和db建立连接但最多不超过maxActive值,用户线程等待时间增大,T1(与数据库建立连接的时间)没有被取代,违背了连接池原理。
2、流量逐步降低情况
当用户流量下降,连接池内空闲连接增多,但至少保持20–30个连接(需配置D类方法,进行空闲连接巡测),当流量再次增大时,同时借用连接的线程>30时,连接池又要现和db建立连接,又违背了连接池原理。
二、总结
B1 不违背连接池原理 A+B1+C+E
B2 违背连接池原理 A+B2+C+D+E
import org.apache.commons.dbcp.BasicDataSource;
public class TestDbcp {
//初始化-pool全局共享
private static BasicDataSource pool = null;
//连接池需唯一且需先创建
static {
if(pool == null) {
//创建连接池
pool = new BasicDataSource();
//连接数据库的基本信息
pool.setDriverClassName("com.mysql.jdbc.Driver");
pool.setUrl("jdbc:mysql://ip:3306/interface?characterEncoding=utf-8&useSSL=false");
pool.setUsername("Username");
pool.setPassword("Password");
//连接池内的连接数量
pool.setInitialSize(10);
pool.setMinIdle(10);
pool.setMaxIdle(10);
pool.setMaxActive(10);
//连接池借出和客户端归还连接前的连接有效性检查
pool.setTestOnBorrow(false);
pool.setTestOnReturn(false);
pool.setMaxWait(3000);
//连接池内连接预编译检查
pool.setPoolPreparedStatements(true);
}
}



