Apache DBCP数据库连接池使用Demo
来源:互联网 发布:unity3d解包工具 编辑:程序博客网 时间:2024/04/29 18:44
简介
Apache DBCP是一个封装良好数据库连接池。本文给出了一个配置文件Demo和连接池的单例封装。
连接池单例封装
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 连接池定义(对DPCP连接池进行包装以便对其进行单例控制),该类是单例模式(在应用程序中只能有一个实例)。
* 配置文件为classpath:dbcp-config.properties
*
*/
public class DBCPConnectionPool {
// log
private static final Logger log = LoggerFactory.getLogger(DBCPConnectionPool.class);
// 用类变量来保存唯一实例
private volatile static DBCPConnectionPool uniqueInstance;
// DBCP连接池配置文件定义
private String configration = "/dbcp-config.properties";
//
private DataSource dataSource = null;
/* 构造器私有化,以确保不能随便创建该类的实例 */
private DBCPConnectionPool() {
try {
log.info("初始化DBCP连接池...");
init();
log.info("初始化DBCP连接池完毕.");
} catch (Exception e) {
log.error("初始化DBCP数据库连接池时出现异常[{}],程序退出。", configration, e);
System.exit(-1);
}
}
/**
* 使用者只能通过此方法获取 DBCPConnectionPool 的唯一实例。注意:当无法初始化数据库连接池时程序会退出.
*
* @return DBCPConnectionPool 的唯一实例
*/
public static DBCPConnectionPool getInstance() {
if (uniqueInstance == null) {
synchronized (DBCPConnectionPool.class) {
if (uniqueInstance == null) {
uniqueInstance = new DBCPConnectionPool();
}
}
}
return uniqueInstance;
}
/**
* 从连接池中获取一个数据库连接(Connection),此Connection是DBCP框架对原生连接进行封装过的。
* 获取的Connection使用完毕后要放回到连接池(通过调用Connection的close方法)
*
* @return Connection对象,使用完毕后要调用close方法以便将其放回到连接池
* @throws Exception
* 连接不能保证总能正确获取
*/
public Connection getConnection() throws Exception {
Connection conn = dataSource.getConnection();
printDataSource();
return conn;
}
/**
* 初始化方法,用于初始化DBCP连接池
*
* @throws Exception
*/
private void init() throws Exception {
Properties properties = createConfigrationProperties();
dataSource = BasicDataSourceFactory.createDataSource(properties);
}
/**
* 加载DBCP配置文件为 Properties 对象
*
* @return DBCP配置文件加载以后的 Properties 对象
* @throws Exception
* 文件不存在或读取错误时抛出异常
*/
private Properties createConfigrationProperties() throws Exception {
Properties properties = new Properties();
InputStream in = null;
try {
in = DBCPConnectionPool.class.getResourceAsStream(configration);
properties.load(in);
} catch (Exception e) {
throw e;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
}
return properties;
}
/**
* 以debug等级打印当前连接池信息[当前活动连接、当前Idle连接]
*/
private static void printDataSource() {
StringBuffer poolInfo = new StringBuffer("");
BasicDataSource basicDataSource = (BasicDataSource) getInstance().dataSource;
poolInfo.append("连接池信息[");
poolInfo.append("numActive:");
poolInfo.append(basicDataSource.getNumActive());
poolInfo.append(", numIdle:");
poolInfo.append(basicDataSource.getNumIdle());
poolInfo.append("]");
log.debug(poolInfo.toString());
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
配置文件(dbcp-config.properties)定义Demo
###############################################################################################
#DBCP Connection pool configration
driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin://@192.168.44.130/orcl
username=system
password=oracle
initialSize=10
maxActive=100
maxIdle=50
minIdle=10
maxWait=10000
validationQuery=select * from dual
#testOnBorrow
#testWhileIdle
#testOnReturn
#validationQueryTimeout
#timeBetweenEvictionRunsMillis
#numTestsPerEvictionRun
#defaultCatalog
#defaultTransactionIsolation
#defaultReadOnly
#defaultAutoCommit
driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin://@192.168.44.130/orcl
username=system
password=oracle
initialSize=10
maxActive=100
maxIdle=50
minIdle=10
maxWait=10000
validationQuery=select * from dual
#testOnBorrow
#testWhileIdle
#testOnReturn
#validationQueryTimeout
#timeBetweenEvictionRunsMillis
#numTestsPerEvictionRun
#defaultCatalog
#defaultTransactionIsolation
#defaultReadOnly
#defaultAutoCommit
###############################################################################################
0 1
- Apache DBCP数据库连接池使用Demo
- apache dbcp数据库连接池的使用
- Apache-DBCP数据库连接池解读
- dbcp数据库连接池的使用
- DBCP数据库连接池的使用
- DBCP数据库连接池的使用
- 使用dbcp构建数据库连接池
- DBCP数据库连接池的使用
- 数据库连接池-DBCP (Apache Database Connection pool)
- Apache DBCP数据库连接池溢出调整
- dbcp的简单使用_数据库连接池
- j2se数据库连接池,dbcp使用模板
- JAVA中使用DBCP做数据库连接池
- 数据库连接池 dbcp与c3p0的使用
- java数据库连接池dbcp的使用
- dbcp,c3p0数据库连接池的使用
- 11、数据库连接池DBCP的使用
- Tomcat中内置DBCP数据库连接池使用
- FFMPEG中重要的数据结构的挖掘
- 第五周项目二-游戏中的角色类(1)
- win10下MySQL的zip安装记录
- 2016-03-29《鸟哥私房菜学习笔记 》
- java面试狂魔之hibernate悲观锁和乐观锁
- Apache DBCP数据库连接池使用Demo
- 求两个整数的最大公约数和最小公倍数
- Android studio 中 jniLibs下不显示jar包
- 时钟类的完整程序
- EndNote的使用
- 常用正则
- 广告人经常上的网站
- HDU 1023 Train Problem II (打表求解卡特兰数)
- A*算法解决八数码问题时,第N步的解空间是多少?