11、数据库连接池DBCP的使用

时间:2022-05-25 08:28:01

1、由于数据库连接池的使用很普遍,常见的数据库连接池有DBCP和C3P0

2、关于DBCP的使用

3、利用DBCP数据库连接池,直接返回一个DataSource给我们使用

4、首先在项目里面,导入DBCP的jar文件

5、用到的dbcpconfig.properties配置文件如下   

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testdatabase
username=root
password=1234

#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000


#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=utf8

#指定由连接池所创建的连接的自动提交(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_COMMITTED

6、在GenericityJDBCUtils使用DBCP数据库连接池的代码如下(由于这里的重点是DBCP的使用,简化了GenericityJDBCUtils类的实现)

       

package com.jdbc.dbcppool;

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;

public class GenericityJDBCUtils {
// 数据库连接池,用于获取数据库的连接,提高效率
private static DataSource dataSource = null;

/**
* 在第一次加载GenericityJDBCUtils类的时候,利用DBCP,初始化dataSource
* 然后利用dataSource,可以方便的去获取数据库的连接
*/
static {

try {
Properties properties = new Properties();
properties.load(GenericityJDBCUtils.class.getClassLoader()
.getResourceAsStream("dbcpconfig.properties"));
dataSource = BasicDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

/**
* 获取一个数据库的连接
*
* @return
*/
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException("从连接池里面,获取数据库连接失败" + e);
}
}

/**
* 释放数据库的连接
*
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn, Statement st, ResultSet rs) {

if (rs != null) {
try {
rs.close();
} catch (Exception e) {
throw new RuntimeException("ResultSet关闭异常");
}
rs = null;
}
if (st != null) {
try {
st.close();
} catch (Exception e) {
throw new RuntimeException("Statement关闭异常");
}
st = null;
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
throw new RuntimeException("Connection关闭异常");
}
conn = null;
}

}

}


7、测试代码如下

package com.jdbc.dbcppool;

import java.sql.Connection;

public class Test {
public static void main(String[] args) {
Connection connection = GenericityJDBCUtils.getConnection();
System.out.println(connection);
}

}


8、程序运行如下

11、数据库连接池DBCP的使用