日常啰嗦

終于回到既定軌道上了,這一篇講講數(shù)據(jù)庫連接池的相關(guān)知識,線程池以后有機(jī)會再結(jié)合項(xiàng)目單獨(dú)寫篇文章(自己給自己挖坑,不知道什么時(shí)候能填上),從這一篇文章開始到本階段結(jié)束的文章都會圍繞數(shù)據(jù)庫和dao層的優(yōu)化去寫,本篇是一個(gè)開始。本文會介紹連接池技術(shù)并對比目前比較流行的java連接池技術(shù),之后,會把druid整合到項(xiàng)目中來,將技術(shù)方案落地,實(shí)際整合到項(xiàng)目中,讓技術(shù)能為我所用。

使用連接池的原因

jdbc的demo

//第一步,注冊驅(qū)動程序  //com.MySQL.jdbc.Driver  Class.forName("數(shù)據(jù)庫驅(qū)動的完整類名");//第二步,獲取一個(gè)數(shù)據(jù)庫的連接  Connection conn = DriverManager.getConnection("數(shù)據(jù)庫地址","用戶名","密碼");    
//第三步,創(chuàng)建一個(gè)會話  Statement stmt=conn.createStatement();   
//第四步,執(zhí)行SQL語句  stmt.executeUpdate("SQL語句");  
//或者查詢記錄  ResultSet rs = stmt.executeQuery("查詢記錄的SQL語句");  
//第五步,對查詢的結(jié)果進(jìn)行處理  while(rs.next()){  
//操作  }  
//第六步,關(guān)閉連接  rs.close();  
stmt.close();  
conn.close();

對上面幾行代碼,大家不會陌生,這可能是我們初學(xué)jdbc連接時(shí)最熟悉的代碼了,雖然現(xiàn)在可能用到了一些數(shù)據(jù)層ORM框架,但是底層實(shí)現(xiàn)依然如同上面代碼一樣,只是做了一些封裝而已。這種方式也有一些不足,在與mysql進(jìn)行數(shù)據(jù)交互時(shí)每次都需要新建connection資源,用完后關(guān)閉掉Connection資源,這種做法是非常浪費(fèi)資源的,如果抬杠的話,可能有人會說,我就喜歡這種方式,我服務(wù)器配置足夠好,我一點(diǎn)都不擔(dān)心什么資源不資源,那你牛逼。

浪費(fèi)資源這種說法是相對而言的,如果在小型項(xiàng)目中或者項(xiàng)目與數(shù)據(jù)庫的交互不那么頻繁的話,數(shù)據(jù)庫連接的創(chuàng)建與關(guān)閉也不見得會把資源浪費(fèi)多少,亦或者在項(xiàng)目啟動時(shí)期,我們可能只考慮功能實(shí)現(xiàn),就直接copy一份現(xiàn)成的數(shù)據(jù)庫集成代碼過來用,這種做法都是很正常的現(xiàn)象,本階段的內(nèi)容主要是項(xiàng)目優(yōu)化,那么關(guān)注點(diǎn)肯定就不是項(xiàng)目初始時(shí)期,也不去討論硬件配置有多好,而是針對目前代碼中的不足進(jìn)行優(yōu)化,找到一個(gè)相對較好的優(yōu)化方案,并落實(shí)到項(xiàng)目中去,今天我們講的優(yōu)化方案就是使用連接池技術(shù)代替目前與數(shù)據(jù)庫的交互方式。

為什么在連接數(shù)據(jù)庫時(shí)要使用連接池?
數(shù)據(jù)庫連接是一種關(guān)鍵的有限的昂貴的資源,一個(gè)數(shù)據(jù)庫連接對象均對應(yīng)一個(gè)物理數(shù)據(jù)庫連接,每次操作都打開一個(gè)物理連接,使用完都關(guān)閉連接,這樣造成系統(tǒng)的性能低下。

數(shù)據(jù)庫連接池的解決方案是在應(yīng)用程序啟動時(shí)建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個(gè)連接池,簡單的說,就是在一個(gè)"池"里放了好多半成品的數(shù)據(jù)庫連接對象,由應(yīng)用程序動態(tài)地對池中的連接進(jìn)行申請、使用和釋放等操作。

連接池技術(shù)盡可能多地重用了消耗內(nèi)存地資源,大大節(jié)省了內(nèi)存,提高了服務(wù)器的服務(wù)效率,減少了程序與數(shù)據(jù)庫交互時(shí)的部分開銷,顯著的改善應(yīng)用程序的性能,通過使用連接池,提高了程序運(yùn)行效率,同時(shí),我們可以通過其自身的管理機(jī)制來監(jiān)視數(shù)據(jù)庫連接的數(shù)量、使用情況等。

連接池的工作原理

連接池技術(shù)的核心思想是連接復(fù)用(也是我們在前一篇文章中提到的資源重用),通過建立一個(gè)數(shù)據(jù)庫連接池以及一套連接使用、分配和管理策略,使得該連接池中的連接可以得到高效、安全的復(fù)用,避免了