四个流行的java连接池之DBCP篇

DBCP (DatabaseConnection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版本对应的是JDK 1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK 1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。

使用DBCP会用到3个包:即commons-dbcp.jarcommons-pool.jarcommons-collections.jar.

使用DBCP的好处:

   建立数据库连接是一个非常消耗资源的行为,如当有一个数据访问操作时,需要创建一个连接,当这次服务访问完成后,这个连接虽然已关闭但是还没有被销毁,这样会耗内存。当下次再有需要数据访问的操作时程序又会创建连接,如此以往既消耗时间,又要消耗资源。所以最后就使用了一种节省资源的方式,即数据库连接池的方式。DBCP的工作原理是,程序首先会初始化相应的数据库连接池,以供程序访问,当某个操作需要访问数据库时,程序会首先在连接池中取得空闲连接,如没有空闲连接在创建,用完之后归还连接池,这样达到了连接的重利用,不用频繁的创建连接和销毁,从而优化程序。

常见属性:

driver:数据库驱动,如com.mysql.jdbc.Driver

url:数据库连接,如jdbc:mysql://localhost:3306/testDB

username:数据库用户名,如root

password:数据库用户名口令,如root

initsize:初始化连接池大小

minidle:最小空闲连接

maxidle:最大空闲连接

它表示的是如果在并发的情况下,达到了maxidle=15一下面配置为例,这时连接池就必须从数据库中获取15个连接来供应程序使用,当应用连接关闭之后,由于maxikle=10并不是所有的连接都归还给了数据库,将会有10连接保存在连接池中,这时的状态就是空闲。

maxactive:最大连接,表示在并发情况下最大能从数据连接池中获取的连接数

maxwait:最大等待时间

removeabandoned:是否自动回收超时连接,boolean类型(true/false

dbcp1.2.2之后有新的支持,在这个版本中表示此属性已过期。

removeabandonedtimeout:超时时间,以秒为单位

示例(Java操作):

package com.wgy.dbcp;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Properties;

importorg.apache.commons.dbcp.BasicDataSource;

public class DBCPTest {

// 连接驱动

private static String DRIVER_CLASS =null;

// 连接地址

private static String URL = null;

// 数据库用户名

private static String USER_NAME =null;

// 数据库口令

private static String PASSWORD =null;

protected Connection conn = null;

protected PreparedStatement ps =null;

protected ResultSet rs = null;

// 初始化连接

private static int initSize;

// 最大连接数

private static int maxActive;

// 最小空闲连接

private static int minIdle;

// 最大空闲连接

private static int maxIdle;

// 最大等待时间

private static int maxWait;

// 等待超时是否自动回收超时连接

private static booleanremoveAbandoned;

// 超时时间

private static intremeoveAbandonedTimeout;

// 是否事物提交

private static booleandefaultAutocommit;

// 对于数据库是否只能读取

private static booleandefaultReadonly;

// 创建数据库连接对象(数据源)

private static BasicDataSourcedataSource = new BasicDataSource();

// 配置数据源

static {

setProperty();

DataSourceConfig();

}

/**

 * 读取配置文件,并设置数据库连接池的属性

 */

private static void setProperty() {

// 创建配置文件对象

Properties props = new Properties();

// 获得配置文件输入流对象

InputStream input = DBCPTest.class

.getResourceAsStream("/dbcp.properties");

try {


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部