大家使用过JDBC的都知道,这个数据源在数据库连接的时候非常重要,对于性能的优化更是大大的提升,当然了,
一般只需要了解数据源是包装了从数据库获得的连接,然后放到连接池中,使用的时候直接从连接池中拿出连接,使用
完毕后,就再放入到连接池中,然后对于Connection 的使用没有改变,还是直接close。其实是对Close方法做了内部
实现改进,不是关闭连接而是把连接放入到连接池中。这样使用的时候是感觉不到的,而且数据源的优化远远不止这
些,它还能够动态的控制连接池内活动连接的多少,根据系统的负载动态的增加或者减少连接池内部的活动链接个数。
可以说是非常好的,当然了,实现一个真正能应用的数据源是非常复杂的,我们先学会怎么使用就好,下面来演示一下
如何使用Apache的开源项目,DBCP,DataBase Connection Pool的缩写。
首先需要下载commons-dbcp-1.4-bin,但是他倚赖commons-collections-3.2.1-bin,commons-pool-1.6-bin,这两
个包,需要把他们的JAR包导入到工程中,然后需要一个配置文件来配置一下连接数据库的一些默认参数
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=mysql
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
最后就是使用了,其实非常简单,就是一句代码
package com.bird.jdbc;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/**
* JDBC工具类
* @author bird
*
*/
public final class Temple {
private static DataSource dataSource;
private Temple() {
}
static {
try {
Class.forName("com.mysql.jdbc.Driver");
Properties pro = new Properties();
InputStream in = Temple.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
pro.load(in);
dataSource = BasicDataSourceFactory.createDataSource(pro);//注意这段代码!!!
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public static void free(Connection con, Statement st, ResultSet rs) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (con != null)
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
BasicDataSourceFactory.createDataSource(pro);这句话就是使用dbcp的代码,非常简单,下面的工作就是交给
DBCP去完成了哦!