資料庫連接配接池
1.資料庫連接配接池的必要性
不使用資料庫連接配接池——普通的JDBC資料庫連接配接存在的問題:
1)會消耗大量的資源和時間
普通的JDBC資料庫連接配接使用 java.sql.DriverManager 來擷取,每次向資料庫建立連接配接的時候都要将 Connection 加載到記憶體中,再驗證IP位址,使用者名和密碼(得花費0.05s~1s的時間)。需要資料庫連接配接的時候,就向資料庫要求一個,執行完成後再斷開連接配接。這樣的方式将會消耗大量的資源和時間。
資料庫的連接配接資源并沒有得到很好的重複利用.若同時有幾百人甚至幾千人線上,頻繁的進行資料庫連接配接操作将占用很多的系統資源,嚴重的甚至會造成伺服器的崩潰。
2)對于每一次資料庫連接配接,使用完後都得斷開。否則,如果程式出現異常而未能關閉,将會導緻資料庫系統中的記憶體洩漏,最終将導緻重新開機資料庫。
3)這種開發不能控制被建立的連接配接對象數,系統資源會被毫無顧及的配置設定出去,如連接配接過多,也可能導緻記憶體洩漏,伺服器崩潰。
為解決傳統開發中的資料庫連接配接問題,可以采用資料庫連接配接池技術(connection pool)。
2.資料庫連接配接池概述
資料庫連接配接池的基本思想就是為資料庫連接配接建立一個“緩沖池”。預先在緩沖池中放入一定數量的連接配接,當需要建立資料庫連接配接時,隻需從“緩沖池”中取出一個,使用完畢之後再放回去。
資料庫連接配接池負責配置設定、管理和釋放資料庫連接配接,它允許應用程式重複使用一個現有的資料庫連接配接,而不是重建立立一個。連接配接池的最大資料庫連接配接數量限定了這個連接配接池能占有的最大連接配接數,當應用程式向連接配接池請求的連接配接數超過最大連接配接數量時,這些請求将被加入到等待隊列中。

3.資料庫連接配接池技術的優點:
1.資源重用:
- 由于資料庫連接配接得以重用,避免了頻繁建立,釋放連接配接引起的大量性能開銷。
- 在減少系統消耗的基礎上,另一方面也增加了系統運作環境的平穩性。
2.更快的系統反應速度
- 資料庫連接配接池在初始化過程中,往往已經建立了若幹資料庫連接配接置于連接配接池中備用。此時連接配接的初始化工作均已完成。對于業務請求處理而言,直接利用現有可用連接配接;
- 避免了資料庫連接配接初始化和釋放過程的時間開銷,進而減少了系統的響應時間
3.新的資源配置設定手段
- 對于多應用共享同一資料庫的系統而言,可在應用層通過資料庫連接配接池的配置,實作某一應用最大可用資料庫連接配接數的限制,避免某一應用獨占所有的資料庫資源
4.統一的連接配接管理,避免資料庫連接配接洩露
- 在較為完善的資料庫連接配接池實作中,可根據預先的占用逾時設定,強制回收被占用連接配接,進而避免了正常資料庫連接配接操作中可能出現的資源洩露
4.資料庫連接配接池開源
JDBC 的資料庫連接配接池使用 javax.sql.DataSource 來表示,DataSource 隻是一個接口,該接口通常由伺服器(Weblogic, WebSphere, Tomcat)提供商實作,也有一些開源組織提供實作:
- DBCP 是Apache提供的資料庫連接配接池,速度相對c3p0較快,但因自身存在BUG,Hibernate3已不再提供支援
- C3P0 是一個開源組織提供的一個資料庫連接配接池,速度相對較慢,穩定性還可以
- Proxool 是sourceforge下的一個開源項目資料庫連接配接池,有監控連接配接池狀态的功能,穩定性較c3p0差一點
- BoneCP 是一個開源組織提供的資料庫連接配接池,速度快
- Druid 是阿裡提供的資料庫連接配接池,據說是集DBCP 、C3P0 、Proxool 優點于一身的資料庫連接配接池,但是速度不知道是否有BoneCP快
DataSource 通常被稱為資料源,它包含連接配接池和連接配接池管理兩個部分,習慣上也經常把 DataSource 稱為連接配接池。
注意:
- 資料源和資料庫連接配接不同,資料源無需建立多個,它是産生資料庫連接配接的工廠,是以整個應用隻需要一個資料源即可。
- 當資料庫通路結束後,程式還是像以前一樣關閉資料庫連接配接:conn.close(); 但conn.close()并沒有關閉資料庫的實體連接配接,它僅僅把資料庫連接配接釋放,歸還給了資料庫連接配接池。