連接池詳解,c3p0與dbcp的區別!
連接池是創建和管理一個連接的緩沖池的技術,這些連接準備好被任何需要它們的線程使用。這項技術能明顯提高對數據庫操作的性能。
連接池的好處:
(1)對於大多數應用程序,當它們正在處理事務時,僅需要能夠訪問JDBC連接的 1 個線程。當不處理事務時,這個連接就會閑置(造成資源的浪費)。相反,連接池允許閑置的連接被其它需要的線程使用。
(2)當一個線程需要用 JDBC 對一個 數據庫操作時,它從池中請求一個連接。當這個線程使用完了這個連接,將它返回到連接池中(連接池會自動收回連接,當然我們也可以在用完以後釋放),這樣這就可以被其它想使用它的線程使用,這樣不會照成內存的浪費。
(3)當連接被從池中調用出來,那麽這個連接將被這個線程專有地使用。
連接池主要的優點有:
① 減少連接創建時間及資源的使用 :因為連接是循環使用的,所以就少了創建連接所需要的時間,更重要的是不會在線程每一次調用JDBC的時候都去創建一個新的連接,造成資源浪費。
②簡化的編程模式:當使用連接池時,每一個單獨的線程在使用其中的連接時,就能夠像創建了一個自己的 JDBC 連接一樣操作,允許用戶直接使用JDBC編程技術。
註意:每個連到數據庫的連接在客戶端和服務器端都有花銷(內存,CPU,上下文切換等等)。每個連接均會對應用程序和 數據庫服務器的可用資源帶來一定的限制。不管這些連接是否在做有用的工作,仍將使用這些資源中的相當一部分。
連接池能夠使性能最大化,同時還能將資源利用控制在一定的水平之下,如果超過該水平,應用程序將崩潰而不僅僅是變慢。
連接池的運作原理:
在實際應用開發中,特別是在WEB應用系統中,如果使用JDBC直接訪問數據庫中的數據,每一次數據訪問請求都必須經歷建立數據庫連接、打開數據庫、存取數據和關閉數據庫連接等步驟,而連接並打開數據庫是會消耗時間和資源的工作,如果頻繁發生這種數據庫操作,不僅系統的性能會急劇下降,甚至會導致系統崩潰。數據庫連接池技術是解決這個問題最常用的方法,連接池雖然不需要我們自己編程,但是,我們作為一名使用者還是要深入了解這項技術的,了解以後會讓我們使用得心應手。
數據庫連接池技術的思想非常簡單:
將數據庫連接作為對象存儲在一個Vector數組中,一旦數據庫連接建立後,不同的數據庫訪問請求就可以共享這些連接,這樣,通過循環利用這些已經建立好的數據庫連接,就可以節省我們去不斷創建新連接的是啊進和資源,極大地節省系統資源和時間。
數據庫連接池的主要操作如下:
(1)建立數據庫連接池對象(服務器啟動)。
(2)按照事先指定的參數創建初始數量的數據庫連接(即:空閑連接數),我們在安裝數據庫的時候就可以指定。
(3)對於一個數據庫訪問請求,直接從連接池中得到一個連接。如果數據庫連接池對象中沒有空閑的連接,且連接數沒有達到 最大(即:最大活躍連接數),創建一個新的數據庫連接。而如果連接數達到最大,就會再創建事先定好的連接數.
(4)對數據庫進行存取操作。
(5)關閉數據庫,釋放所有數據庫連接(此時的關閉數據庫連接,並非真正關閉,而是將其放入空閑隊列中。如實際空閑連接 數大於初始空閑連接數則釋放連接)。
(6)釋放數據庫連接池對象(服務器停止、維護期間,釋放數據庫連接池對象,並釋放所有連接)。
實現原理:
百度百科有詳細的記載,我講述的話可能不是那麽的讓您看的懂(能力有限)。
c3p0:
c3p0與dbcp的定義:
C3P0:C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規範和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。
dbcp:DBCP(DataBase Connection Pool)數據庫連接池,是java數據庫連接池的一種,由Apache開發,通過數據庫連接池,可以讓程序自動管理數據庫連接的釋放和斷開。
c3p0與dbcp區別:
dbcp沒有自動回收空閑連接的功能
c3p0有自動回收空閑連接功能
兩者主要是對數據連接的處理不同c3p0提供最大空閑時間,dbcp提供最大連接數。前者是如果連接時間超過最大連接時間,就會斷開當前連接。dbcp如果超過最大連接數,就會斷開所有連接。
c3p0連接池的使用:
C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規範和JDBC2的標準擴展。
1.導包 》c3p0-0.9.1.2.jar
2.導入配置文件(不是必須的,但是在企業中一定使用配置文件)
如果不使用配置文件,就要在代碼中設置數據庫參數4個
項目分為開發環境和運營環境,在開發時,開發人員接觸不到公司實際數據庫。數據是機密, 但是開發後也要更改數據庫,如果不需要更改代碼,那就是要使用配置文件
3.導入自己寫的工具類(初始化連接池 獲得連接的方法)。
4.在dao中使用的工具類獲得連接 或者連接池(有的工具類可以自動幫我們去創建連接)。
比如dbutil工具類
配置文件:
java中的一些鍵值對的配置文件專門提供了這樣的類和文件名。
Properties 文件的後綴名
Properties讀取.properties文件的類
讀取配置文件
1.將配置文件變成流
2.用java提供的Properties類去加載這個流
3.調用properties對象的getProperties的方法 這個方法需要一個參數 鍵名返回的是一個值(字符串型)
連接池詳解,c3p0與dbcp的區別!