溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

連接池詳解,c3p0與dbcp的區(qū)別!

發(fā)布時間:2020-10-03 21:43:29 來源:網(wǎng)絡(luò) 閱讀:8869 作者:IT_laobai 欄目:開發(fā)技術(shù)

連接池:

    連接池是創(chuàng)建和管理一個連接的緩沖池的技術(shù),這些連接準(zhǔn)備好被任何需要它們的線程使用。這項技術(shù)能明顯提高對數(shù)據(jù)庫操作的性能。

  連接池的好處:

(1)對于大多數(shù)應(yīng)用程序,當(dāng)它們正在處理事務(wù)時,僅需要能夠訪問JDBC連接的 1 個線程。當(dāng)不處理事務(wù)時,這個連接就會閑置(造成資源的浪費)。相反,連接池允許閑置的連接被其它需要的線程使用。

(2)當(dāng)一個線程需要用 JDBC 對一個 數(shù)據(jù)庫操作時,它從池中請求一個連接。當(dāng)這個線程使用完了這個連接,將它返回到連接池中(連接池會自動收回連接,當(dāng)然我們也可以在用完以后釋放),這樣這就可以被其它想使用它的線程使用,這樣不會照成內(nèi)存的浪費。

(3)當(dāng)連接被從池中調(diào)用出來,那么這個連接將被這個線程專有地使用。

  連接池主要的優(yōu)點有

   減少連接創(chuàng)建時間及資源的使用 :因為連接是循環(huán)使用的,所以就少了創(chuàng)建連接所需要的時間,更重要的是不會在線程每一次調(diào)用JDBC的時候都去創(chuàng)建一個新的連接,造成資源浪費。

   ②簡化的編程模式:當(dāng)使用連接池時,每一個單獨的線程在使用其中的連接時,就能夠像創(chuàng)建了一個自己的 JDBC 連接一樣操作,允許用戶直接使用JDBC編程技術(shù)。

    注意:每個連到數(shù)據(jù)庫的連接在客戶端和服務(wù)器端都有花銷(內(nèi)存,CPU,上下文切換等等)。每個連接均會對應(yīng)用程序和 數(shù)據(jù)庫服務(wù)器的可用資源帶來一定的限制。不管這些連接是否在做有用的工作,仍將使用這些資源中的相當(dāng)一部分。

    連接池能夠使性能最大化,同時還能將資源利用控制在一定的水平之下,如果超過該水平,應(yīng)用程序?qū)⒈罎⒍粌H僅是變慢。


連接池的運作原理:

      在實際應(yīng)用開發(fā)中,特別是在WEB應(yīng)用系統(tǒng)中,如果使用JDBC直接訪問數(shù)據(jù)庫中的數(shù)據(jù),每一次數(shù)據(jù)訪問請求都必須經(jīng)歷建立數(shù)據(jù)庫連接、打開數(shù)據(jù)庫、存取數(shù)據(jù)和關(guān)閉數(shù)據(jù)庫連接等步驟,而連接并打開數(shù)據(jù)庫是會消耗時間和資源的工作,如果頻繁發(fā)生這種數(shù)據(jù)庫操作,不僅系統(tǒng)的性能會急劇下降,甚至?xí)?dǎo)致系統(tǒng)崩潰。數(shù)據(jù)庫連接池技術(shù)是解決這個問題最常用的方法,連接池雖然不需要我們自己編程,但是,我們作為一名使用者還是要深入了解這項技術(shù)的,了解以后會讓我們使用得心應(yīng)手。

   數(shù)據(jù)庫連接池技術(shù)的思想非常簡單

       將數(shù)據(jù)庫連接作為對象存儲在一個Vector數(shù)組中,一旦數(shù)據(jù)庫連接建立后,不同的數(shù)據(jù)庫訪問請求就可以共享這些連接,這樣,通過循環(huán)利用這些已經(jīng)建立好的數(shù)據(jù)庫連接,就可以節(jié)省我們?nèi)ゲ粩鄤?chuàng)建新連接的是啊進和資源,極大地節(jié)省系統(tǒng)資源和時間。

  數(shù)據(jù)庫連接池的主要操作如下:
(1)建立數(shù)據(jù)庫連接池對象(服務(wù)器啟動)。
(2)按照事先指定的參數(shù)創(chuàng)建初始數(shù)量的數(shù)據(jù)庫連接(即:空閑連接數(shù)),我們在安裝數(shù)據(jù)庫的時候就可以指定。
(3)對于一個數(shù)據(jù)庫訪問請求,直接從連接池中得到一個連接。如果數(shù)據(jù)庫連接池對象中沒有空閑的連接,且連接數(shù)沒有達到    最大(即:最大活躍連接數(shù)),創(chuàng)建一個新的數(shù)據(jù)庫連接。而如果連接數(shù)達到最大,就會再創(chuàng)建事先定好的連接數(shù).
(4)對數(shù)據(jù)庫進行存取操作。
(5)關(guān)閉數(shù)據(jù)庫,釋放所有數(shù)據(jù)庫連接(此時的關(guān)閉數(shù)據(jù)庫連接,并非真正關(guān)閉,而是將其放入空閑隊列中。如實際空閑連接  數(shù)大于初始空閑連接數(shù)則釋放連接)。
(6)釋放數(shù)據(jù)庫連接池對象(服務(wù)器停止、維護期間,釋放數(shù)據(jù)庫連接池對象,并釋放所有連接)。
  

實現(xiàn)原理:

    百度百科有詳細的記載,我講述的話可能不是那么的讓您看的懂(能力有限)。

c3p0:

  c3p0與dbcp的定義

    C3P0:C3P0是一個開源的JDBC連接池,它實現(xiàn)了數(shù)據(jù)源和JNDI綁定,支持JDBC3規(guī)范和JDBC2的標(biāo)準(zhǔn)擴展。目前使用它的開源項目有Hibernate,Spring等。
    dbcp:DBCP(DataBase Connection Pool)數(shù)據(jù)庫連接池,是java數(shù)據(jù)庫連接池的一種,由Apache開發(fā),通過數(shù)據(jù)庫連接池,可以讓程序自動管理數(shù)據(jù)庫連接的釋放和斷開。

  c3p0與dbcp區(qū)別:

      dbcp沒有自動回收空閑連接的功能

      c3p0有自動回收空閑連接功能

      兩者主要是對數(shù)據(jù)連接的處理不同c3p0提供最大空閑時間,dbcp提供最大連接數(shù)。前者是如果連接時間超過最大連接時間,就會斷開當(dāng)前連接。dbcp如果超過最大連接數(shù),就會斷開所有連接。

    c3p0連接池的使用:

    C3P0是一個開源的JDBC連接池,它實現(xiàn)了數(shù)據(jù)源和JNDI綁定,支持JDBC3規(guī)范和JDBC2的標(biāo)準(zhǔn)擴展。
    1.導(dǎo)包  》c3p0-0.9.1.2.jar
    2.導(dǎo)入配置文件(不是必須的,但是在企業(yè)中一定使用配置文件)
        如果不使用配置文件,就要在代碼中設(shè)置數(shù)據(jù)庫參數(shù)4個
        項目分為開發(fā)環(huán)境和運營環(huán)境,在開發(fā)時,開發(fā)人員接觸不到公司實際數(shù)據(jù)庫。數(shù)據(jù)是機密, 但是開發(fā)后也要更改數(shù)據(jù)庫,如果不需要更改代碼,那就是要使用配置文件
    3.導(dǎo)入自己寫的工具類(初始化連接池 獲得連接的方法)。
    4.在dao中使用的工具類獲得連接  或者連接池(有的工具類可以自動幫我們?nèi)?chuàng)建連接)。
    比如dbutil工具類
    
    配置文件:
        java中的一些鍵值對的配置文件專門提供了這樣的類和文件名。
        Properties 文件的后綴名
        Properties讀取.properties文件的類
        讀取配置文件
        1.將配置文件變成流
        2.用java提供的Properties類去加載這個流
        3.調(diào)用properties對象的getProperties的方法 這個方法需要一個參數(shù) 鍵名返回的是一個值(字符串型)
   


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI