dataSource 元素使用基本的 JDBC 數據源接口來配置 JDBC 連接對象的資源。
- 許多 MyBatis 的應用程序將會按示例中的例子來配置數據源。 然而它並不是必須的。 要知道為了方便使用延遲加載,數據源才是必須的。
有三種內建的數據源類型(也就是 type=”???”):
UNPOOLED – 這個數據源的實現是每次被請求時簡單打開和關閉連接。它有一點慢, 這是對簡單應用程序的一個很好的選擇, 因為它不需要及時的可用連接。 不同的數據庫對這 個的表現也是不一樣的, 所以對某些數據庫來說配置數據源並不重要, 這個配置也是閑置的。 UNPOOLED 類型的數據源僅僅用來配置以下 5 種屬性:
- driver – 這是 JDBC 驅動的 Java 類的完全限定名(如果你的驅動包含,它也不是 數據源類)。
- url – 這是數據庫的 JDBC URL 地址。
- username – 登錄數據庫的用戶名。
- password – 登錄數據庫的密碼。
- defaultTransactionIsolationLevel – 默認的連接事務隔離級別。
作為可選項,你可以傳遞數據庫驅動的屬性。要這樣做,屬性的前綴是以“driver.”開 頭的,例如:
- driver.encoding=UTF8
這 樣 就 會 傳 遞 以 值 “ UTF8 ” 來 傳 遞 屬 性 “ encoding ”, 它 是 通 過 DriverManager.getConnection(url,driverProperties)方法傳遞給數據庫驅動。
POOLED – 這是 JDBC 連接對象的數據源連接池的實現,用來避免創建新的連接實例 時必要的初始連接和認證時間。這是一種當前 Web 應用程序用來快速響應請求很流行的方 法。
除了上述(UNPOOLED)的屬性之外,還有很多屬性可以用來配置 POOLED 數據源:
- poolMaximumActiveConnections – 在任意時間存在的活動(也就是正在使用)連 接的數量。默認值:10
- poolMaximumIdleConnections – 任意時間存在的空閑連接數。
- poolMaximumCheckoutTime – 在被強制返回之前,池中連接被檢查的時間。默認 值:20000 毫秒(也就是 20 秒)
- poolTimeToWait – 這是給連接池一個打印日志狀態機會的低層次設置,還有重新 嘗試獲得連接, 這些情況下往往需要很長時間 為了避免連接池沒有配置時靜默失 敗)。默認值:20000 毫秒(也就是 20 秒)
- poolPingQuery – 發送到數據的偵測查詢,用來驗證連接是否正常工作,並且准備 接受請求。默認是“NO PING QUERY SET” ,這會引起許多數據庫驅動連接由一 個錯誤信息而導致失敗。
- poolPingEnabled – 這是開啟或禁用偵測查詢。如果開啟,你必須用一個合法的 SQL 語句(最好是很快速的)設置 poolPingQuery 屬性。默認值:false。
- poolPingConnectionsNotUsedFor – 這是用來配置 poolPingQuery 多次時間被用一次。 這可以被設置匹配標准的數據庫連接超時時間, 來避免不必要的偵測。 默認值: 0(也就是所有連接每一時刻都被偵測-但僅僅當 poolPingEnabled 為 true 時適用)。
JNDI – 這個數據源的實現是為了使用如 Spring 或應用服務器這類的容器, 容器可以集 中或在外部配置數據源,然后放置一個 JNDI 上下文的引用。這個數據源配置只需要兩個屬 性:
- initial_context – 這 個 屬 性 用 來 從 初 始 上 下 文 中 尋 找 環 境 ( 也 就 是 initialContext.lookup(initial——context) 。這是個可選屬性,如果被忽略,那么 data_source 屬性將會直接以 initialContext 為背景再次尋找。
- data_source – 這是引用數據源實例位置的上下文的路徑。它會以由 initial_context 查詢返回的環境為背景來查找,如果 initial_context 沒有返回結果時,直接以初始 上下文為環境來查找。
和其他數據源配置相似, 它也可以通過名為 “env.” 的前綴直接向初始上下文發送屬性。 比如:
- env.encoding=UTF8
在初始化之后,這就會以值“UTF8”向初始上下文的構造方法傳遞名為“encoding” 的屬性。