Mybatis中的DataSource配置


dataSource 的類型可以配置成其內置類型之一,如 UNPOOLED,POOLED,JNDI。
1、如果將類型設置成 UNPOOLED,MyBatis 會為每一個數據庫操作創建一個新的連接,並關閉它。該方式
適用於只有小規模數量並發用戶的簡單應用程序上。
2、 如果將屬性設置成 POOLED,MyBatis 會創建一個數據庫連接池,連接池中的一個連接將會被用作數據
庫操作。一旦數據庫操作完成,MyBatis 會將此連接返回給連接池。在開發或測試環境中,經常使用此
種方式。
3、如果將類型設置成 JNDI,MyBatis 從在應用服務器向配置好的 JNDI 數據源 dataSource 獲取數據庫
連接。在生產環境中,優先考慮這種方式。

 

詳細

數據源(dataSource)

dataSource 元素使用標准的 JDBC 數據源接口來配置 JDBC 連接對象的資源。

  • 許多 MyBatis 的應用程序會按示例中的例子來配置數據源。雖然這是可選的,但為了使用延遲加載,數據源是必須配置的。

有三種內建的數據源類型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):

UNPOOLED– 這個數據源的實現只是每次被請求時打開和關閉連接。雖然有點慢,但對於在數據庫連接可用性方面沒有太高要求的簡單應用程序來說,是一個很好的選擇。 不同的數據庫在性能方面的表現也是不一樣的,對於某些數據庫來說,使用連接池並不重要,這個配置就很適合這種情形。UNPOOLED 類型的數據源僅僅需要配置以下 5 種屬性:

  • driver – 這是 JDBC 驅動的 Java 類的完全限定名(並不是 JDBC 驅動中可能包含的數據源類)。
  • url – 這是數據庫的 JDBC URL 地址。
  • username – 登錄數據庫的用戶名。
  • password – 登錄數據庫的密碼。
  • defaultTransactionIsolationLevel – 默認的連接事務隔離級別。

作為可選項,你也可以傳遞屬性給數據庫驅動。要這樣做,屬性的前綴為“driver.”,例如:

  • driver.encoding=UTF8

這將通過 DriverManager.getConnection(url,driverProperties) 方法傳遞值為 UTF8 的 encoding 屬性給數據庫驅動。

POOLED– 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來,避免了創建新的連接實例時所必需的初始化和認證時間。 這是一種使得並發 Web 應用快速響應請求的流行處理方式。

除了上述提到 UNPOOLED 下的屬性外,還有更多屬性用來配置 POOLED 的數據源:

  • poolMaximumActiveConnections – 在任意時間可以存在的活動(也就是正在使用)連接數量,默認值:10
  • poolMaximumIdleConnections – 任意時間可能存在的空閑連接數。
  • poolMaximumCheckoutTime – 在被強制返回之前,池中連接被檢出(checked out)時間,默認值:20000 毫秒(即 20 秒)
  • poolTimeToWait – 這是一個底層設置,如果獲取連接花費了相當長的時間,連接池會打印狀態日志並重新嘗試獲取一個連接(避免在誤配置的情況下一直安靜的失敗),默認值:20000 毫秒(即 20 秒)。
  • poolMaximumLocalBadConnectionTolerance – 這是一個關於壞連接容忍度的底層設置, 作用於每一個嘗試從緩存池獲取連接的線程. 如果這個線程獲取到的是一個壞的連接,那么這個數據源允許這個線程嘗試重新獲取一個新的連接,但是這個重新嘗試的次數不應該超過 poolMaximumIdleConnections 與 poolMaximumLocalBadConnectionTolerance 之和。 默認值:3 (新增於 3.4.5)
  • poolPingQuery – 發送到數據庫的偵測查詢,用來檢驗連接是否正常工作並准備接受請求。默認是“NO PING QUERY SET”,這會導致多數數據庫驅動失敗時帶有一個恰當的錯誤消息。
  • poolPingEnabled – 是否啟用偵測查詢。若開啟,需要設置 poolPingQuery 屬性為一個可執行的 SQL 語句(最好是一個速度非常快的 SQL 語句),默認值:false。
  • poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的頻率。可以被設置為和數據庫連接超時時間一樣,來避免不必要的偵測,默認值:0(即所有連接每一時刻都被偵測 — 當然僅當 poolPingEnabled 為 true 時適用)。

JNDI – 這個數據源的實現是為了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置一個 JNDI 上下文的引用。這種數據源配置只需要兩個屬性:

  • initial_context – 這個屬性用來在 InitialContext 中尋找上下文(即,initialContext.lookup(initial_context))。這是個可選屬性,如果忽略,那么 data_source 屬性將會直接從 InitialContext 中尋找。
  • data_source – 這是引用數據源實例位置的上下文的路徑。提供了 initial_context 配置時會在其返回的上下文中進行查找,沒有提供時則直接在 InitialContext 中查找。

和其他數據源配置類似,可以通過添加前綴“env.”直接把屬性傳遞給初始上下文。比如:

  • env.encoding=UTF8

這就會在初始上下文(InitialContext)實例化時往它的構造方法傳遞值為 UTF8 的 encoding 屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM