1. 程式人生 > >資料庫 連線池技術

資料庫 連線池技術

###綱要: 1.資料庫連線池 概念 2.連線池技術分類、 3.具體介紹 a.C3P0連線池技術 b.Druid連線池技術 #資料庫連線池

一:

####1)概念: a.其實就是一個容器(集合),存放資料庫連線的容器。 b.當系統初始化好後,容器被建立,容器中會申請一些連線物件,當用戶來訪問資料庫時,從容器中獲取連線物件,使用者訪問完之後,會將連線物件歸還給容器。 ####2) 原理: 連線池基本的思想是在系統初始化的時候,將資料庫連作為物件儲存在記憶體中, 當用戶需要訪問資料庫時,並非建立一個新的連線,而是從連線池中取出一個已建立的空閒連線物件。 使用完畢後,使用者也並非將連線關閉,而是將連線放回連線池中, 以供下一個請求訪問使用。而連線的建立、斷開都由連線池自身來管理。 同時,還可以通過設定連線池的引數來控制連線池中的初始連線數、連線的上下限數以及每個連線的最大使用次數、最大空閒時間等等。 也可以通過其自身的管理機制來監視資料庫連線的數量、使用情況等。 ####3) 實現: 標準介面:DataSource javax.sql包下的 方法: * 獲取連線:getConnection() * 歸還連線:Connection.close() (如果連線物件Connection是從連線池中獲取的,那麼呼叫Connection.close()方法,則不會再關閉連線了。而是歸還連線)

二:

####分類 ####1)C3P0: 是一個開放原始碼的JDBC連線池,它在lib目錄中與Hibernate [2] 一起釋出,包括了實現jdbc3和jdbc2擴充套件規範說明的Connection 和Statement 池的DataSources 物件。 ####2)Druid: Druid不僅是一個數據庫連線池,還包含一個ProxyDriver、一系列內建的JDBC元件庫、一個SQL Parser。支援所有JDBC相容的資料庫,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。 Druid針對Oracle和MySql做了特別優化, 比如: Oracle的PS Cache記憶體佔用優化 MySql的ping檢測優化 Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支援,這是一個手寫的高效能SQL Parser,支援Visitor模式,使得分析SQL的抽象語法樹很方便。 簡單SQL語句用時10微秒以內,複雜SQL用時30微秒。 通過Druid提供的SQL Parser可以在JDBC層攔截SQL做相應處理,比如說分庫分表、審計等。Druid防禦SQL注入攻擊的WallFilter,就是通過Druid的SQL Parser分析語義實現的 ####3)Proxool: 是一個Java SQL Driver驅動程式,提供了對選擇的其它型別的驅動程式的連線池封裝。可以非常簡單的移植到現存的程式碼中,完全可配置,快速、成熟、健壯。可以透明地為現存的JDBC驅動程式增加連線池功能。 ####4)Jakarta DBCP: DBCP是一個依賴Jakartacommons-pool物件池機制的資料庫連線池。DBCP可以直接的在應用程式中使用。 ####5)DDConnectionBroker: 是一個簡單、輕量級的資料庫連線池。 ####6)DBPool: 是一個高效、易配置的資料庫連線池。它除了支援連線池應有的功能之外,還包括了一個物件池,使使用者能夠開發一個滿足自己需求的資料庫連線池。 ####7)XAPool: 是一個XA資料庫連線池。它實現了javax.sql.XADataSource並提供了連線池工具。 ####8)Primrose: 是一個Java開發的資料庫連線池。當前支援的容器包括Tomcat4&5、Resin3與JBoss3。它同樣也有一個獨立的版本,可以在應用程式中使用而不必執行在容器中。Primrose通過一個WEB介面來控制SQL處理的追蹤、配置,以及動態池管理。在重負荷的情況下可進行連線請求佇列處理。 ####9)SmartPool: 是一個連線池元件,它模仿應用伺服器物件池的特性。SmartPool能夠解決一些臨界問題如連線洩漏(connection leaks)、連線阻塞、開啟的JDBC物件(如Statements、PreparedStatements)等。SmartPool的特性包括: 支援多個pool、自動關閉相關聯的JDBC物件、在所設定time-outs之後察覺連線洩漏、追蹤連線使用情況、強制啟用最近最少用到的連線、把SmartPool“包裝”成現存的一個pool ####10)MiniConnectionPoolManager: 是一個輕量級JDBC資料庫連線池。它只需要Java1.5(或更高)並且沒有依賴第三方包。 ####11)BoneCP: 是一個快速、開源的資料庫連線池。幫使用者管理資料連線,讓應用程式能更快速地訪問資料庫。比C3P0/DBCP連線池速度快25倍。

三:

####具體介紹: ####1)C3P0連線池技術 * 步驟: 1. 匯入jar包 (兩個) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar , * 不要忘記匯入資料庫驅動jar包 2. 定義配置檔案: * 名稱: c3p0.properties 或者 c3p0-config.xml * 路徑:直接將檔案放在src目錄下即可。

		3. 建立核心物件 資料庫連線池物件 ComboPooledDataSource
		4. 獲取連線: getConnection

如圖所示:

####2)Druid連線池技術 * 步驟: 1. 匯入jar包 druid-1.0.9.jar 2. 定義配置檔案: * 是properties形式的 * 可以叫任意名稱,可以放在任意目錄下 3. 載入配置檔案。Properties 4. 獲取資料庫連線池物件:通過工廠來來獲取 DruidDataSourceFactory 5. 獲取連線:getConnection

如圖所示:

載入的檔案