天天看點

spring學習筆記(17)資料庫配置[1]spring資料連接配接池詳解資料連接配接池

在spring中,常使用資料庫連接配接池來完成對資料庫的連接配接配置,類似于線程池的定義,資料庫連接配接池就是維護有一定數量資料庫連接配接的一個緩沖池,一方面,能夠即取即用,免去初始化的時間,另一方面,用完的資料連接配接會歸還到連接配接池中,這樣就免去了不必要的連接配接建立、銷毀工作,提升了性能。當然,使用連接配接池,有一下幾點是連接配接池配置所考慮到的,也屬于配置連接配接池的優點,而這些也會我們後面的執行個體配置中展現:

1、 如果沒有任何一個使用者使用連接配接,那麼那麼應該維持一定數量的連接配接,等待使用者使用。

2、 如果連接配接已經滿了,則必須打開新的連接配接,供更多使用者使用。

3、 如果一個伺服器就隻能有100個連接配接,那麼如果有第101個人過來呢?應該等待其他使用者釋放連接配接

4、 如果一個使用者等待時間太長了,則應該告訴使用者,操作是失敗的。

在spring中,常用的連接配接池有:jdbc,dbcp,c3p0,jndi4種,他們有不同的優缺點和适用場景。其中,spring架構推薦使用dbcp,hibernate架構推薦使用c3p0。經測試發現,c3p0與dbcp相比較,c3p0能夠更好的支援高并發,但是在穩定性方面略遜于dpcp。

下面對幾個連接配接池進行示例配置:

jdbc連接配接池配置示例

drivermanagerdatasource沒有實作連接配接池化連接配接的機制,每次調用getconnection()擷取新連接配接時,隻是簡單地建立一個新的連接配接。是以,一般這種方式常用于開發時測試,不用于生産。

dbcp連接配接池配置示例

以上參數是我們在實際開發中常用到的。關于分析都在注釋裡。

c3p0連接配接池配置示例

它的常用配置屬性見下表:

屬性

說明

預設值

acquireincrement

當連接配接池中的連接配接用完時,c3p0一次性建立新連接配接的數目

5

acquireretryattempts

定義在從資料庫擷取新連接配接失敗後重複嘗試擷取的次數

30

checkouttimeout

當連接配接池用完時用戶端調用getconnection()後等待擷取新連接配接的時間,逾時後将抛出sqlexception,如設為0則無限期等待。機關毫秒

initialpoolsize

初始化時建立的連接配接數,應在minpoolsize與maxpoolsize之間取值

3

maxidletime

最大空閑時間,超過空閑時間的連接配接将被丢棄。為0或負數則永不丢棄

maxpoolsize

連接配接池中保留的最大連接配接數

15

numhelperthreads

c3p0是異步操作的,緩慢的jdbc操作通過幫助程序完成。擴充這些操作可以有效的提升性能,通過多線程實作多個操作同時被執行

4. jndi連接配接池配置示例

如果我們需要使用遠端伺服器(如weblogic等)自帶的資料源時,常使用這種配置。jndi在spring中有兩種配置方式,一種是利用spring内置的jndiobjectfactorybean。

另一種則是利用spring為擷取j2ee資源提供的一個jee命名空間:

在下一篇文章,我會示例如何通過jndi在我們的應用伺服器上配置多資料源,然後在我們的web項目中進行通路。同時,我們會結合aop簡單模拟主從分庫的讀寫分離執行個體。通過針對我們的dao層的不同通路資料庫方法來完成我們的讀寫分離。