DBCP
一、導包
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
二、代碼示例:
方式一:使用BasicDataSource 通過方法設置連接參數。
其中的Close方法是被改寫過得,及不會真正的將連接關閉,而是將其放回到連接池中,對於所有的數據源一般都會改寫此方法(使用修飾)。
方式二:使用BasicDataSourceFactory +配置文件
配置文件dbcp.properties(注配置文件中的參數的名稱固定):
另:配置文件中除了可以配置以上4個數據庫連接的必須信息外,還可以配置其他的參數,官方較完整的配置文件的參考如下:
C3P0
一、導包
下載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中內置有數據源,而DBCP與tomcat同屬於Apache的項目,因此不難知道tomcat中內置的數據源其實就是DBCP數據源。使用Tomcat的內置數據源可分爲兩步:
一:爲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>)。
參考代碼如下: