目錄:

  1. 情景描述
  2. 池概念 資料庫連接池
  3. 連接池分類
  4. DBCP連接池使用
  5. 配置文件介紹
  6. 配置文件改寫DBCP
  7. Druid連接池
  8. 總結與感謝

1.情景描述

我們在寫任何一個方法的時候都要進行如下兩步:

conn = JDBCUtil.getConn();
JDBCUtil.close(conn, ps, null);

即連接資料庫和釋放資源

DAO方法中每次都創建一個connection對象,用完就關閉了,創建Connection成本很大

如何解決這個問題?


2.什麼是連接池

  • 沒有連接池的情況

每次CRUD操作都要使用資料庫的時候,都要創建一個資料庫對象

普通的JDBC資料庫連接使用DriverManager來獲取每次向資料庫連接的時候都要將Connection載入到內容中然後再驗證用戶名和密碼花費時間0.05s~1s左右每次CRUD操作就向資料庫要一個連接,執行完成後再斷開連接,這樣的方式將會消耗大量的資源和時間-->>資料庫的連接資源並沒有得到很好的重複利用-->>若同時又幾百人甚至幾千人在線,-->>頻繁的進行資料庫連接操作將佔用很多的系統資源,嚴重的甚至會造成伺服器崩潰

  • 資料庫連接池

1.什麼是「池」?

保存對象的容器

2.什麼是資料庫連接池?

保存資料庫連接對象的容器

3.作用

初始化時創建一定數量的對象。需要時直接從池中取出一個空閑對象,

用完後並不直接釋放掉對象,而是再放到對象池中以方便下一次對象請求可以直接復用。池技術的優勢是,可以消除對象創建所帶來的延遲,從而提高系統的性能。

4.詳細說明

資料庫連接池的基本思想就是為資料庫連接建立一個「緩衝池」

與現在緩衝池中放入一定數量的連接,當需要建立資料庫連接時,只需要從「緩衝池」中取出一個,使用完畢之後再放回去。我們可以通過設定連接池最大連接數來防止系統無盡的與資料庫連接可以通過連接池的管理機制監視資料庫的連接的數量,使用情況,

為系統開發,測試及性能調整提供依據

5.示意圖

連接對象以鏈表List形式存放,已釋放的連接,放到最後。

從最前面獲取連接對象

  • 連接池中的屬性


3.連接池分類——常見的連接池


4.DBCP連接池使用

需要注意的是這裡的DataSource數據源等價於連接池Connection Pool 只是叫法不一樣

我們在JDBC裡面的DataSource和其它應用中的DataSource不是一個東西,不要混淆了

具體使用:

  • 導入相關jar包

commons-dbcp-1.4.jar

commons-pool-1.5.6.jar

大家可以自行去官網下載 懶得找的話我這裡放出鏈接

pan.baidu.com/s/1JPp_ia

解壓

  • 修改代碼

修改獲取連接的方式 由DriverManager改為資料庫連接池

因此不再需要載入驅動

getConn方法的返回值也由資料庫連接池返回


5.配置文件

配置文件就是以.properties作為擴展名的文件

JDBCUtil當中的用戶名,密碼這些信息偶讀寫到了文件當中,不便於維護

這時我們就需要把這些用戶名密碼地址信息等存儲到一個專門的文件中,與我們的代碼分隔開

配置文件的書寫:

我們要做的就是JDBCUtil類中的這些地址信息拿出來 放在一個配置文件中

操作實驗:

首先在src文件夾中new一個file

PS:在開發中我們不是直接放src裡面的 而是在項目Project中單獨創建一個文件夾

注意 不是Folder 而是Source Folder 命名為resource資源文件

這樣干是有區別的 Source Folder裡面的內容會被編譯到bin目錄中去 而Folder則不會

將地址等信息拿過來 並將前面的數據類型string雙引號刪掉

最好把空格也刪掉 因為讀取的時候有可能把空格也讀取了 導致出錯

然後我們在需要獲取這些地址信息的JDBCUtil類中加上如下代碼 讀取這些信息

new FileInputStream的時候會報異常 因為有可能地址不存在 我們這裡先拋出


6.配置文件改寫DBCP

new一個SourceFolder文件 並將地址等信息放在裡面

注意 變數名稱key值不能瞎寫 DBCP規定了這些變數名稱

回到JDBCUtil 改寫代碼

這裡放一張圖回顧一下以前是怎麼寫的


7.Druid德魯伊 阿里巴巴出的連接池

下方是官方文檔的說明

只需要將BasicDataSource改寫為DruidDataSource就行

首先導包

https://pan.baidu.com/s/1fryNcipQqWEXbcSswtrhVw?

pan.baidu.com

把第一個搞到lib裡面 然後bulid path

修改代碼 導第一個包

finish!


8.總結與感謝

本知乎幾乎是複述高新強老師的javaweb網課,我只是整理整理筆記,供自己和大夥復慣用,再次感謝高新強老師


推薦閱讀:
查看原文 >>
相关文章