Spring DataSource

何爲DataSourcejava

DataSource 接口是 JDBC 2.0 API 中的新增內容,它提供了鏈接到數據源的另外一種方法。 
做爲 DriverManager 工具的替代項,DataSource 對象是獲取鏈接的首選方法。 
實現 DataSource 接口的對象一般在基於JNDI API 的命名服務中註冊。spring

無論經過何種持久化技術,都必須經過數據鏈接訪問數據庫,在傳統的應用中數據鏈接能夠經過DriverManager獲的, 
在Spring中,數據鏈接通常是經過數據源得到的。在以往的應用中,數據源通常是 Web應用服務器提供的。 
在Spring中,你不但能夠經過JNDI獲取應用服務器的數據源,也能夠直接在Spring容器中配置數據源, 
此外,你還能夠 經過代碼的方式建立一個數據源,以便進行無依賴的單元測試。sql

DataSource API定義: 數據庫

package javax.sql;
 
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Wrapper;
 
public interface DataSource  extends CommonDataSource,Wrapper {
 
  Connection getConnection() throws SQLException;
   
  Connection getConnection(String username, String password) 
    throws SQLException;
}

在Spring中配置Datasourceapache

一、JDBC服務器

Spring自己也提供了一個簡單的數據源實現類DriverManagerDataSource , 
它位於org.springframework.jdbc.datasource包中。這個類實現了javax.sql.DataSource接口, 
但它並無提供池化鏈接的機制,每次調用getConnection()獲取新鏈接時,只是簡單地建立一個新的鏈接。 
所以,這個數據源類比較適合在單元測試 或簡單的獨立應用中使用,由於它不須要額外的依賴類。app

DriverManagerDataSource創建鏈接是隻要有鏈接就新建一個connection,根本沒有鏈接池的做用。工具

Spring在第三方依賴包中包含了兩個數據源的實現類包,其一是Apache的DBCP,其二是 C3P0。 單元測試

二、DBCP 
DBCP類包位於 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一個依賴 Jakarta commons-pool對象池機制的數據庫鏈接池, 因此在類路徑下還必須包括/lib/jakarta- commons/commons-pool.jar。
測試

dataSource = org.apache.commons.dbcp.BasicDataSource

BasicDataSource提供了close()方法關閉數據源,因此必須設定destroy-method=」close」屬性, 
以便Spring容器關閉時,數據源可以正常關閉。除以上必須的數據源屬性外,還有一些經常使用的屬性: 
defaultAutoCommit:設置從數據源中返回的鏈接是否採用自動提交機制,默認值爲 true; 
defaultReadOnly:設置數據源是否僅能執行只讀操做, 默認值爲 false; 
maxActive:最大鏈接數據庫鏈接數,設置爲0時,表示沒有限制; 
maxIdle:最大等待鏈接中的數量,設置爲0時,表示沒有限制; 
maxWait:最大等待秒數,單位爲毫秒, 超過期間會報出錯誤信息; 
validationQuery:用於驗證鏈接是否成功的查詢SQL語句,SQL語句必須至少要返回一行數據; 
removeAbandoned:是否自我中斷,默認是 false ; 
removeAbandonedTimeout:幾秒後數據鏈接會自動斷開,在removeAbandoned爲true,提供該值; 
logAbandoned:是否記錄中斷事件, 默認爲 false; 

三、C3P0

C3P0是一個開放源代碼的JDBC數據源實現項目,C3P0類包位於Spring中lib/c3p0/c3p0-0.9.1.2.jar。

通常在下載hibernate的時候都會自帶一個: 在hibernate-release-4.3.0.Final\lib\optional\c3p0路徑下找到的。  

相關文章
相關標籤/搜索