1. 程式人生 > >關於Datasource與資料庫連線池的區別。

關於Datasource與資料庫連線池的區別。

微笑 剛開始搞不太清楚這兩者的關係     現在查閱多方資料後 自己整理思路。

資料庫連線有兩種方式:

1 :直連資料庫方式

當呼叫DataSource.getConnection()時,其實它呼叫的是DriverManager.getConnection(url, user, password)來獲取一個Connection,Connection使用完後被close,斷開與資料庫的連線,我們稱這總方式是直連資料庫,因為每次都需要重新建立與資料庫之間的連線,而並沒有把之前的Connection保留供下次使用.

2:池化連線方式
1.可以說這種方式就是使用了連線池技術.DataSource內部封裝了一個連線池

,當你獲取DataSource的時候,它已經敲敲的與資料庫建立了多個Connection,並將這些Connection放入了連線池,此時呼叫DataSource.getConnection()它從連線池裡取一個Connection返回,Connection使用完後被close,但這個close並不是真正的與資料庫斷開連線,而是告訴連線池"我"已經被使用完,"你"可以把我分配給其它"人"使用了.就這樣連線池裡的Connection被迴圈利用,避免了每次獲取Connection時重新去連線資料庫.

對DataSource的兩種實現方式已經介紹完畢,現在知道DataSource與連線池之間的是關係而不是區別了吧,因為DataSource與連線池根本就不是同一型別的東西,只有同一型別的東西才存在區別,例如:oracle與db2都是資料庫,它們才存在區別.
 
DataSource與連線池的關係是:DataSource利用連線池快取Connection,以達到系統效率的提升,資源的重複利用.
 
而連線池它可以單獨存在,不需要依靠DataSource來獲取連線,你可以直接呼叫連線池提供的方法來獲取連線.
 
目前大多數應用伺服器都支援池化連線方式的DataSource.
 
常用的連線池有c3p0,dbcp,Proxool...
 
一般場景:JNDI-> DataSource->連線池(c3p0,dbcp,Proxool等)->DriverManager->connection