使用jar包:commons-dbcp-1.4.jar、commons-pool-1.6.jar、commons-logging-1.1.3.jar,另外還有數據庫的jdbc驅動,適用java6及以上平台
連接池管理類
代碼如下:
package cn.songxinqiang.samples.commonsdbcp.util;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;
/**
* tomcat數據庫連接池管理類<br>
* 使用為tomcat部署環境<br>
* 需要在類路徑下准備數據庫連接配置文件dbcp.properties
*
* @author 宋信強
* @mail [email protected]
*
* @time 2013-12-27
*
*/
public class DBManager {
private static final Log log = LogFactory.getLog(DBManager.class);
private static final String configFile = "dbcp.properties";
private static DataSource dataSource;
static {
Properties dbProperties = new Properties();
try {
dbProperties.load(DBManager.class.getClassLoader()
.getResourceAsStream(configFile));
dataSource = BasicDataSourceFactory.createDataSource(dbProperties);
Connection conn = getConn();
DatabaseMetaData mdm = conn.getMetaData();
log.info("Connected to " + mdm.getDatabaseProductName() + " "
+ mdm.getDatabaseProductVersion());
if (conn != null) {
conn.close();
}
} catch (Exception e) {
log.error("初始化連接池失敗:" + e);
}
}
private DBManager() {
}
/**
* 獲取鏈接,用完後記得關閉
*
* @see {@link DBManager#closeConn(Connection)}
* @return
*/
public static final Connection getConn() {
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
log.error("獲取數據庫連接失敗:" + e);
}
return conn;
}
/**
* 關閉連接
*
* @param conn
* 需要關閉的連接
*/
public static void closeConn(Connection conn) {
try {
if (conn != null && !conn.isClosed()) {
conn.setAutoCommit(true);
conn.close();
}
} catch (SQLException e) {
log.error("關閉數據庫連接失敗:" + e);
}
}
}
連接配置文件
代碼如下:
#數據庫驅動
driverClassName=com.mysql.jdbc.Driver
#數據庫連接地址
url=jdbc:mysql://localhost/ctg
#用戶名
username=root
#密碼
password=123456
#連接池的最大數據庫連接數。設為0表示無限制
maxActive=30
#最大空閒數,數據庫連接的最大空閒時間。超過空閒時間,數據庫連
#接將被標記為不可用,然後被釋放。設為0表示無限制
maxIdle=10
#最大建立連接等待時間。如果超過此時間將接到異常。設為-1表示無限制
maxWait=1000
#超過removeAbandonedTimeout時間後,是否進 行沒用連接(廢棄)的回收(默認為false,調整為true)
removeAbandoned=true
#超過時間限制,回收沒有用(廢棄)的連接(默認為 300秒,調整為180)
removeAbandonedTimeout=180
測試連接池工作效率,同時演示怎樣獲取連接和關閉連接
代碼如下:
public class ConnectionSource {
public static void main(String[] args){
long begin=System.currentTimeMillis();
for(int i=0;i<10000;i++){
Connection conn=DBManager.getConn();
System.out.print(i+" ");
DBManager.closeConn(conn);
}
long end=System.currentTimeMillis();
System.out.println("用時:"+(end-begin));
}
}