鏈接池的優缺點html
優勢java
使用鏈接池的最主要的優勢是性能。建立一個新的數據庫鏈接所耗費的時間主要取決於網絡的速mysql
度以及應用程序和數據庫服務器的web
(sql
網絡數據庫
)tomcat
距離,並且這個過程一般是一個很耗時的過程。而採用服務器
數據庫鏈接池後,數據庫鏈接請求能夠直接經過鏈接池知足而不須要爲該請求從新鏈接、認證到網絡
數據庫服務器,這樣就節省了時間。app
缺點
數據庫鏈接池中可能存在着多個沒有被使用的鏈接一直鏈接着數據庫
(
這意味着資源的浪費
)
。
Apache官網下載DBCP包,導入兩個包路徑以下:
commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:鏈接池的實現
commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:鏈接池實現的依賴庫
CSDN上jar包的下載地址:http://download.csdn.net/detail/u012802702/9491642
其中的Close方法是被改寫過得,及不會真正的將鏈接關閉,而是將其放回到鏈接池中,對於全部的數據源通常都會改寫此方法(使用修飾)。
配置文件dbcp.properties(注配置文件中的參數的名稱固定):
另:配置文件中除了能夠配置以上4個數據庫鏈接的必須信息外,還能夠配置其餘的參數,官方較完整的配置文件的參考以下:
下載C3p0數據源的jar包導入以下jar包:
Lib\c3p0-0.9.1.2.jar
CDSN的下載地址:http://download.csdn.net/detail/u012802702/9491641
方式二:配置文件的方式加載數據庫驅動信息
C3p0的使用較爲簡單,一般來講只要在src目錄下添加一個c3p0的配置文件,在程序中使用一句代碼
1)ComboPooledDataSource source = new ComboPooledDataSource()使用配置文件中的默認配置<default-config>,或者
2)ComboPooledDataSource source = new ComboPooledDataSource(「配置文件中name-config的名稱」)使用配置文件中的其餘配置
默認狀況下C3p0會在類加載路徑下搜索名稱爲c3p0-config.xml的配置文件,所以該配置文件應該方式在類加載目錄、或者jar加載目錄、或者WEB-INF/classes、或相似目錄下。
c3p0-config.xml文件配置以下:
固然在配置文件中能夠配置數據庫鏈接池的其餘相關信息,官方建議的基本配置參數有:
acquireIncrement:聲明當鏈接池中鏈接耗盡時再一次新生成多少個鏈接,默認爲3個
initialPoolSize:當鏈接池啓動時,初始化鏈接的個數,必須在minPoolSize~maxPoolSize之間,默認爲3
minPoolSize:任什麼時候間鏈接池中保存的最小鏈接數,默認3
maxPoolSize:在任什麼時候間鏈接池中所能擁有的最大鏈接數,默認15
maxIdleTime:超過多長時間鏈接自動銷燬,默認爲0,即永遠不會自動銷燬
C03p0的官方參考模板以下:
Tomcat中內置有數據源,而DBCP與tomcat同屬於Apache的項目,所以不難知道tomcat中內置的數據源其實就是DBCP數據源。使用Tomcat的內置數據源可分爲兩步:
一般狀況下,在使用eclipse或Myeclipse開發時,本身習慣於使用以下方式爲tomcat配置數據源:
在web應用的META-INF文件夾下建立一個context.xml配置文件,並在其中添加<Context>標籤進行配置,但,這種方式生成的數據源只能用於當前web應用.
詳細context.xml文件的參考代碼以下:
在tomcat啓動時,會逐個加載其中的web應用,當其加載到當前應用時,會加載到META-INF文件夾下該context.xml配置文件,此時tomcat會根據其中的配置信息爲當前web應用建立一個數據庫鏈接池,注該數據庫鏈接池只能用於當前web應用,tomcat下的其餘web應用沒法使用該數據庫鏈接池。至於如何配置tomcat的數據庫鏈接池才能使當前tomcat下的全部web應用都能使用,或者能夠使當前虛擬主機下的web應用都能使用?請參考其餘文章:http://blog.csdn.net/u012802702/article/details/51159547。
當tomcat讀取到context.xml配置文件時會爲當前web應用建立數據源,但咱們在當前web應用中如何獲取該數據源對象?
Tomcat中有一個共有的容器:jndi,當Tomcat爲web應用建立數據源以後會將數據源以鍵值對的形式存放到jndi容器當中,其中鍵名就是數據源配置時給定的名字(詳見context.xml配置文件)。
而Tomcat會自動將jndi容器放到初始化容器InitalContext中。且jndi以固定的名字(java:comp/env)存儲在InitalContext容器中,所以在web應用中能夠經過以下步驟首先獲取到數據源實例。
第一步:首先在Servlet中獲取InitalContext容器實例
Context initCtx = new InitialContext();
第二步:在InitalContext容器中根據字符串java:comp/env搜尋,以及獲取jndi容器實例
Context jndi = (Context) initCtx.lookup("java:comp/env");
第三部:根據數據源的名字從jndi容器獲取到數據源實例。
DataSource source = jndi.lookUp("mySource");
完整參考代碼以下:
但到此獲取到數據源對象尚未結束,由於獲取jndi的代碼只能在Servlet中執行,即以上代碼只能在Servlet中執行,所以還應建立一個Servlet類並在其init方法中加入以上代碼,以後即可以將數據源對象傳給其餘程序使用(能夠將數據源對象設爲類變量、或將其放入到ServletContext做用域中等等)。同時將該Servlet配置成爲tomcat啓動時執行(即在web.xml配置文件中對應的該Servlet標籤下添加:<load-on-startup>1</load-on-startup>)。
參考代碼以下: