java配置dbcp連接池(數(shù)據(jù)庫連接池)示例分享
使用jar包:commons-dbcp-1.4.jar、commons-pool-1.6.jar、commons-logging-1.1.3.jar,另外還有數(shù)據(jù)庫的jdbc驅(qū)動,適用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數(shù)據(jù)庫連接池管理類<br>
* 使用為tomcat部署環(huán)境<br>
* 需要在類路徑下準(zhǔn)備數(shù)據(jù)庫連接配置文件dbcp.properties
*
* @author 宋信強(qiáng)
* @mail songxinqiang123@gmail.com
*
* @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() {
}
/**
* 獲取鏈接,用完后記得關(guān)閉
*
* @see {@link DBManager#closeConn(Connection)}
* @return
*/
public static final Connection getConn() {
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
log.error("獲取數(shù)據(jù)庫連接失?。? + e);
}
return conn;
}
/**
* 關(guān)閉連接
*
* @param conn
* 需要關(guān)閉的連接
*/
public static void closeConn(Connection conn) {
try {
if (conn != null && !conn.isClosed()) {
conn.setAutoCommit(true);
conn.close();
}
} catch (SQLException e) {
log.error("關(guān)閉數(shù)據(jù)庫連接失?。? + e);
}
}
}
連接配置文件
#數(shù)據(jù)庫驅(qū)動
driverClassName=com.mysql.jdbc.Driver
#數(shù)據(jù)庫連接地址
url=jdbc:mysql://localhost/ctg
#用戶名
username=root
#密碼
password=123456
#連接池的最大數(shù)據(jù)庫連接數(shù)。設(shè)為0表示無限制
maxActive=30
#最大空閑數(shù),數(shù)據(jù)庫連接的最大空閑時間。超過空閑時間,數(shù)據(jù)庫連
#接將被標(biāo)記為不可用,然后被釋放。設(shè)為0表示無限制
maxIdle=10
#最大建立連接等待時間。如果超過此時間將接到異常。設(shè)為-1表示無限制
maxWait=1000
#超過removeAbandonedTimeout時間后,是否進(jìn) 行沒用連接(廢棄)的回收(默認(rèn)為false,調(diào)整為true)
removeAbandoned=true
#超過時間限制,回收沒有用(廢棄)的連接(默認(rèn)為 300秒,調(diào)整為180)
removeAbandonedTimeout=180
測試連接池工作效率,同時演示怎樣獲取連接和關(guān)閉連接
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));
}
}
相關(guān)文章
Java使用jxl包寫Excel文件適合列寬實(shí)現(xiàn)
用jxl.jar包,讀寫過Excel文件。也沒有注意最適合列寬的問題,但是jxl.jar沒有提供最適合列寬的功能,上次用到寫了一下,可以基本實(shí)現(xiàn)最適合列寬。2013-11-11
多模塊maven的deploy集成gitlab?ci自動發(fā)版配置
這篇文章主要為大家介紹了多模塊maven項(xiàng)目deploy集成gitlab?ci自動發(fā)版的配置流程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02
Spring中的@Value和@PropertySource注解詳解
這篇文章主要介紹了Spring中的@Value和@PropertySource注解詳解,@PropertySource:讀取外部配置文件中的key-value保存到運(yùn)行的環(huán)境變量中,本文提供了部分實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-11-11
java如何實(shí)現(xiàn)基于opencv全景圖合成實(shí)例代碼
全景圖相信大家應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于java如何實(shí)現(xiàn)基于opencv全景圖合成的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
如何獲取MyBatis Plus執(zhí)行的完整的SQL語句
這篇文章主要介紹了如何獲取MyBatis Plus執(zhí)行的完整的SQL語句問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
java 算法之希爾排序詳解及實(shí)現(xiàn)代碼
這篇文章主要介紹了java 算法之希爾排序詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
Jpa 如何使用@EntityListeners 實(shí)現(xiàn)實(shí)體對象的自動賦值
這篇文章主要介紹了Jpa 如何使用@EntityListeners 實(shí)現(xiàn)實(shí)體對象的自動賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
SpringMVC用JsonSerialize日期轉(zhuǎn)換方法
下面小編就為大家?guī)硪黄猄pringMVC用JsonSerialize日期轉(zhuǎn)換方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起 小編過來看看吧2016-11-11
java 單例的五種實(shí)現(xiàn)方式及其性能分析
這篇文章主要介紹了java 單例的五種實(shí)現(xiàn)方式及其性能分析。的相關(guān)資料,需要的朋友可以參考下2017-07-07
Josephus環(huán)的四種解法(約瑟夫環(huán))基于java詳解
這篇文章主要介紹了Josephus環(huán)的四種解法(約瑟夫環(huán))基于java詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09

