数据库连接池
目的:解决建立数据库连接耗费资源和时间很多的问题,提高性能。
数据库连接池,用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。这个池要等到Web服务器停止,或应用程序彻底结束时,才会直正销毁。池销毁之前,池会让池中每个Connection对象调用close()方法来关闭自己。
编写标准的数据源
自定义数据库连接池要实现javax.sql.DataSource接口,一般都叫数据源。
市场上流行的JDBC数据库连接池实现:
1.DBCP(早期)
2.C3P0(今)
DBCP
DBCP:Apache推出的Database Connection Pool
使用步骤:
1、添加jar包 commons-dbcp-1.4.jar commons-pool-1.5.6.jar commons-collections.jar mysql-connector-java-5.1.7-bin.jar
2、添加属性资源文件
3、编写数据源工具类
/**
* DBCP数据库连接池的使用
*/
public class Demo01 {
private static BasicDataSource basicDataSource = new BasicDataSource();
static{
//设置数据库连接池基本属性
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/jdbc");
basicDataSource.setUsername("root");
basicDataSource.setPassword("123");
//设置数据库连接池扩展属性
basicDataSource.setInitialSize(10);
basicDataSource.setMaxActive(10);
basicDataSource.setMaxIdle(5);
}
/**
* 获取数据库连接
*/
public Connection getConnection() throws SQLException{
try {
return basicDataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}
}
}
DBCP的配置:
//基本配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=root
//初始化池大小,即一开始池中就会有10个连接对象,默认值为0
initialSize=0
//最大连接数
maxActive=8
//最大空闲连接
maxIdle=8
//最小空闲连接,默认值为0
minIdle=0
//最大等待时间,默认值为-1,表示无限期等待,不会抛出异常。
maxWait=-1
//连接的默认提交方式,默认值为true
defaultAutoCommit=true
//连接是否为只读连接,如果没有指定这个属性值,那么是否为只读连接,这就由驱动自己来决定了。即Connection的实现类自己来决定!
defaultReadOnly=true
//指定事务的事务隔离级别
可选值:NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
如果没有指定,那么由驱动中的Connection实现类自己来决定
defaultTransactionIsolation=REPEATABLE_READ
C3P0
C3P0也是开源免费的连接池!实现类:ComboPooledDataSource
使用步骤:
1、添加jar包,导入 c3p0-0.9.1.2.jar
mysql-connector-java-5.1.7-bin.jar
2、编写配置文件c3p0-config.xml,c3p0的配置文件名必须为c3p0-config.xml,并且必须放在src路径下。
3、编写工具类
/**
* C3P0数据库连接池的使用方式
*/
public class Demo{
/**
* 自动加载/src/c3p0-config.xml文件
*/
private static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("oracle-config");
/**
* 获取数据库连接
*/
public Connection getConnection() throws SQLException{
try {
return comboPooledDataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}
}
}