文章目录
数据库连接池
概述
1.用池来管理Connection,这可以重复使用Connection
连接池也是使用四大连接参数来创建连接对象
2.池参数(所有池参数都有默认值)
初始大小:10个
最小空闲连接数:3个
增量:一次创建的最小单位(5个)
最大空闲连接数:12个
最大连接数:20个
最大的等待时间:1000毫秒
3.实现的接口
连接池必须实现:javax.sql.DataSource接口
连接池返回的Connection对象,调用它的close()不是关闭,而是把连接归还给池
DBCP连接池
DBCP是Apache提供的一款开源免费的数据库连接池
需要使用两个jar包:commons-dbcp-1.4.jar和commons-pool-1.3.jar(以及mysql驱动包)
使用方法:
BasicDataSource dataSource = new BasicDataSource();//创建连接池对象
//配置四大参数
dataSource.setUsername("root");
dataSource.setPassword("123");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb3");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
//设置池参数
dataSource.setMaxActive(20);//最大连接数
dataSource.setMaxIdle(10);//最大空闲连接数
dataSource.setInitialSize(10);//初始化连接数
dataSource.setMinIdle(2);//最小空闲连接数
dataSource.setMaxWait(1000);//最大等待毫秒数
Connection con = dataSource.getConnection();//得到连接对象
con.close();//把连接归还给池,dbcp对mysql中connection的close()方法进行增强(装饰设计模式)
//con对象方法,只有close()方法是dbcp自己的
装饰者模式
1.对象增强的手段
(1)继承:会使类增多
被增强的对象固定的
增强的内容也是固定的
(2)装饰者模式
被增强的对象是可以切换的
增强的内容是固定的
(3)动态代理(AOP)
被增强的对象可以切换:Service
增强的内容也可以切换:事务处理
2.学过的装饰类
BufferedInputStream:装饰流!创建我是一定要给我一个底层对象,然后我不管你给我的是什么流,我都会给它添加缓冲区!
class MyConnection implements Connection {
private Connection con;//底层对象,被增强对象
public MyConnection(Connection con){
//通过构造器传递底层对象!
this.con = con;
}
public Statement createStatement() {
依赖被增强对象
return con.createStatement();
}
// 增强点
public void close(){
把当前连接归还给池!
}
}
C3P0连接池
1.C3PO使用方法(常用):
需要两个jar包:c3p0-0.9.2-pre1.jar和mchange-commons-0.2.jar(以及mysql驱动包)
区别于DBCP:dbcp底层依赖装饰模式,而C3P0依赖动态代理(APO)
ComboPooledDataSource ds = new ComboPooledDataSource();
//基本配置
ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb1");
ds.setUser("root");
ds.setPassword("123");
ds.setDriverClass("com.mysql.jdbc.Driver");
//池配置
ds.setAcquireIncrement(5);//每次的增量为5
ds.setInitialPoolSize(20);//初始化连接数
ds.setMinPoolSize(2);//最少连接数
ds.setMaxPoolSize(50);//最多连接数
Connection con = ds.getConnection();
System.out.println(con);
con.close();
2.c3p0也可以指定配置文件,而且配置文件可以是properties,也是xml的
注:c3p0的配置文件名必须为c3p0-config.xml,且必须放在类路径下(src)
<?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"