關於Datasource與資料庫連線池的區別。
剛開始搞不太清楚這兩者的關係 現在查閱多方資料後 自己整理思路。
資料庫連線有兩種方式:
1 :直連資料庫方式
當呼叫DataSource.getConnection()時,其實它呼叫的是DriverManager.getConnection(url, user, password)來獲取一個Connection,Connection使用完後被close,斷開與資料庫的連線,我們稱這總方式是直連資料庫,因為每次都需要重新建立與資料庫之間的連線,而並沒有把之前的Connection保留供下次使用.
2:池化連線方式
1.可以說這種方式就是使用了連線池技術.DataSource內部封裝了一個連線池
對DataSource的兩種實現方式已經介紹完畢,現在知道DataSource與連線池之間的是關係而不是區別了吧,因為DataSource與連線池根本就不是同一型別的東西,只有同一型別的東西才存在區別,例如:oracle與db2都是資料庫,它們才存在區別.
DataSource與連線池的關係是:DataSource利用連線池快取Connection,以達到系統效率的提升,資源的重複利用.
而連線池它可以單獨存在,不需要依靠DataSource來獲取連線,你可以直接呼叫連線池提供的方法來獲取連線.
目前大多數應用伺服器都支援池化連線方式的DataSource.
常用的連線池有c3p0,dbcp,Proxool...
一般場景:JNDI-> DataSource->連線池(c3p0,dbcp,Proxool等)->DriverManager->connection