從屌絲到架構師的飛越(數(shù)據(jù)庫篇)-連接池

一.介紹

連接池是創(chuàng)建和管理一個連接的緩沖池的技術改备,這些連接準備好被任何需要它們的線程使用。

在實際應用開發(fā)中,特別是在WEB應用系統(tǒng)中,如果JSP冻晤、Servlet或EJB使用JDBC直接訪問數(shù)據(jù)庫中的數(shù)據(jù),每一次數(shù)據(jù)訪問請求都必須經(jīng)歷建立數(shù)據(jù)庫連接拟淮、打開數(shù)據(jù)庫疯溺、存取數(shù)據(jù)和關閉數(shù)據(jù)庫連接等步驟,而連接并打開數(shù)據(jù)庫是一件既消耗資源又費時的工作绞铃,如果頻繁發(fā)生這種數(shù)據(jù)庫操作镜雨,系統(tǒng)的性能必然會急劇下降,甚至會導致系統(tǒng)崩潰儿捧。數(shù)據(jù)庫連接池技術是解決這個問題最常用的方法荚坞,在許多應用程序服務器(例如:Weblogic,WebSphere,JBoss)中挑宠,基本都提供了這項技術,無需自己編程西剥,但是痹栖,深入了解這項技術是非常必要的。

數(shù)據(jù)庫連接池技術的思想非常簡單瞭空,將數(shù)據(jù)庫連接作為對象存儲在一個Vector對象中揪阿,一旦數(shù)據(jù)庫連接建立后,不同的數(shù)據(jù)庫訪問請求就可以共享這些連接咆畏,這樣南捂,通過復用這些已經(jīng)建立的數(shù)據(jù)庫連接,可以克服上述缺點旧找,極大地節(jié)省系統(tǒng)資源和時間溺健。

二.知識點介紹

1、連接池規(guī)范

2钮蛛、編寫工具類

3鞭缭、常見配置項

三.上課視頻對應說明文檔

1、連接池規(guī)范

Java為數(shù)據(jù)庫連接池提供了公共的接口:javax.sql.DataSource魏颓,各個廠商需要讓自己的連接池實現(xiàn)這個接口岭辣。這樣應用程序可以方便的切換不同廠商的連接池。

常見的連接池:DBCP甸饱、C3P0沦童。這里學習DBCP連接池。

1.1叹话、連接池技術簡述

當多個程序(多個用戶)有多個需求時偷遗,我們需要創(chuàng)建多個Connection對象,而與數(shù)據(jù)庫創(chuàng)建連接是十分消耗資源的驼壶,連接池創(chuàng)建了多個連接氏豌,當使用連接操作數(shù)據(jù)時,會分配一個連接热凹,而這個連接也可供其他程序(用戶)的數(shù)據(jù)庫操作使用箩溃,類似線程池。

javax.sql包下的 DataSource是線程池接口碌嘀』林迹可以使用getConnection()方法獲取一個連接,如果連接對象Connection是通過連接池獲取的股冗,當通過Connection對象調用close()方法時霹陡,不再是銷毀連接對象,而是將連接對象放回到連接池。

不使用連接池

使用連接池

(1)dbcp連接池介紹

DBCP 是 Apache 軟件基金組織下的一個優(yōu)秀的開源連接池實現(xiàn)烹棉,使用DBCP數(shù)據(jù)源攒霹,應用程序應在系統(tǒng)中增加如下兩個 jar 文件:

Commons-dbcp.jar:連接池的實現(xiàn)

Commons-pool.jar:連接池實現(xiàn)的依賴庫

Tomcat的連接池正是采用該連接池來實現(xiàn)的。該數(shù)據(jù)庫連接池既可以與應用服務器整合使用浆洗,也可由應用程序獨立使用催束。

(2)dbcp連接池配置

//導包加入classpath

// 1.創(chuàng)建連接池對象

BasicDataSource ds = new BasicDataSource();

// 2.設置相關屬性

ds.setDriverClassName("com.mysql.jdbc.Driver");

ds.setUrl("xxx");

ds.setUsername("xxx");

ds.setPassword("xxx");

(3)DBUtils使用連接池

當擁有了連接池后,我們可以直接使用連接池獲取連接對象伏社,完成普通的sql操作抠刺。(在獲取連接后,關閉連接是將連接返還給連接池)

而在DBUtils的學習過程中摘昌,我們使用QueryRunner的空參構造完成速妖,每次請求調用query方法時傳入連接對象。

而當有了線程池后聪黎,可以調用QueryRunner的帶參構造創(chuàng)建對象:

QueryRunner(DataSource connectionPool);

這時罕容,在每次訪問數(shù)據(jù)庫時,將無需再傳入連接對象稿饰。因為在每次使用QueryRunner時锦秒,都已經(jīng)通過連接池獲取了連接。

如:

BasicDataSource ds = new BasicDataSource();

ds.setUrl("jdbc:mysql://localhost:3306/javahelp_gjp");//設置數(shù)據(jù)庫連接

ds.setDriverClassName("com.mysql.jdbc.Driver");//設置驅動名稱

ds.setUsername("root");//設置登錄用戶名

ds.setPassword("abc");//設置登錄密碼

ds.setMaxIdle(3);//連接池最大空閑連接個數(shù)

ds.setMaxWait(3000);//連接池最大等待時間

ds.setMaxActive(5);//連接池最大連接個數(shù)

ds.setInitialSize(3);//連接池初始化連接個數(shù)

QueryRunner qr = new QueryRunner(ds);

//再查詢時無需傳入連接對象喉镰,因為QueryRunner對象已經(jīng)從連接池中獲取了連接

返回值類型? query = qr.query(SQL語句,Handler對象);

2旅择、編寫工具類(最簡單方式)

/*

* 創(chuàng)建DBCP連接池工具類

*

* 作用: 配置DBCP連接池,提供獲取連接池中連接對象的方法

*/

public class DBCPUtils {

//創(chuàng)建連接池

private static BasicDataSource dataSource = new BasicDataSource();

public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";

public static final String URL = "jdbc:mysql://localhost:3306/day22_jdbc";

public static final String USER_NAME = "root";

public static final String PASSWORD = "root";

//通過靜態(tài)代碼塊梧喷,完成dataSource對象的信息配置

static {

//指定驅動名稱

dataSource.setDriverClassName(DRIVER_CLASS_NAME);

//指定數(shù)據(jù)庫URL

dataSource.setUrl(URL);

//指定數(shù)據(jù)庫連接的用戶名

dataSource.setUsername(USER_NAME);

//指定數(shù)據(jù)庫連接的密碼

dataSource.setPassword(PASSWORD);

}

/*

* 提供獲取連接池中連接對象的方法

*/

public static Connection getConnection(){

try{

return dataSource.getConnection();

}catch (Exception e) {

throw new RuntimeException(e);

}

}

}

3、常見配置項

參考文檔: http://commons.apache.org/proper/commons-dbcp/configuration.html

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末脖咐,一起剝皮案震驚了整個濱河市铺敌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屁擅,老刑警劉巖偿凭,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異派歌,居然都是意外死亡弯囊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門胶果,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾嘱,“玉大人,你說我怎么就攤上這事早抠■樱” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悬垃。 經(jīng)常有香客問我游昼,道長,這世上最難降的妖魔是什么尝蠕? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任烘豌,我火速辦了婚禮,結果婚禮上看彼,老公的妹妹穿的比我還像新娘廊佩。我一直安慰自己,他們只是感情好闲昭,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布罐寨。 她就那樣靜靜地躺著,像睡著了一般序矩。 火紅的嫁衣襯著肌膚如雪鸯绿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天簸淀,我揣著相機與錄音瓶蝴,去河邊找鬼。 笑死租幕,一個胖子當著我的面吹牛舷手,可吹牛的內容都是我干的。 我是一名探鬼主播劲绪,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼男窟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贾富?” 一聲冷哼從身側響起歉眷,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颤枪,沒想到半個月后汗捡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡畏纲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年扇住,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盗胀。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡艘蹋,死狀恐怖,靈堂內的尸體忽然破棺而出票灰,到底是詐尸還是另有隱情簿训,我是刑警寧澤咱娶,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站强品,受9級特大地震影響膘侮,放射性物質發(fā)生泄漏。R本人自食惡果不足惜的榛,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一琼了、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夫晌,春花似錦雕薪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凶掰,卻和暖如春燥爷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背懦窘。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工前翎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畅涂。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓港华,卻偏偏與公主長得像,于是被迫代替她去往敵國和親午衰。 傳聞我的和親對象是個殘疾皇子立宜,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容