多個datasource的配置與實現原理

2022-03-12 08:40:08 字數 1172 閱讀 3000

一般情況下,乙個專案中只會有乙個datasource,但是在某些情況、或者業務需求的情況下會出現乙個專案有多個datasource的情況,當滿足一定條件的時候,對資料庫的操作就會從乙個乙個datasource切換到另乙個datasource.

那麼這種多資料來源的配置與實現原理是什麼樣的?

一、spring boot 下配置多個資料來源:

二、實現原理:

目前持久層框架常用的就是mybatis與hibernate, 與資料庫進行互動的工作就是持久層框架做的事。要連線到資料庫,就需要資料庫的url,埠,密碼等資訊,這些資訊的抽象出來我們就叫做資料來源,也就是datasource,下面是常見datasource的一種配置:

上圖是yml格式的配置,也有xml、properties等格式。格式不同,但核心是一樣的,就是儲存連線資料庫的各種必要資訊。當spring框架或者其他框架掃瞄到個datasource的配置,就會根據這個配置生成乙個datasource的bean例項。

而持久層框架進行了一系列準備工作後,需要將sql語句傳送到資料庫,那麼這個時候就需要使用datasource, 其中最核心的就是持久層框架定義了乙個 transaction介面,這個transcation介面有個getconnection()方法,內容就是從datasource中獲取乙個與資料庫的connection,通過操作這個connection將資料傳送到資料庫:

mybatis定義的transaction:

hibernate定義的transaction介面,與mybatis有一些區別,但是在核心方法commit上,都是在操作connection物件:

,從上圖可以看出,transaction這個定義在很多地方使用。實際上,只要是需要通過網路進行通訊的功能,都會有這麼乙個類似datasource的東西來儲存通訊時的必要配置資訊(url、埠、超時時間、協議等等···),這個東西可能叫做datasource,也可能叫做其他名字,但他其實底層本質就是乙個socket,通過層層封裝與抽象來提供給大家使用。

所以就算不使用spring boot的那一套配置,自己也能實現多資料來源的切換,無非就是先定義多個datasource的bean例項出來,然後根據專案中使用的持久層框架的不同來重寫transaction介面中的方法(也可能是其他介面,主要是看框架操作datasource時是怎麼定義的介面,然後再實現該介面就可以了)。以上雖然短短幾句話就說完了,以後有時間再貼出自己實現的多個資料來源的實現**。

Mybatis中的DataSource配置

datasource 的型別可以配置成其內建型別之一,如 unpooled,pooled,jndi。1 如果將型別設定成 unpooled,mybatis 會為每乙個資料庫操作建立乙個新的連線,並關閉它。該方式 適用於只有小規模數量併發使用者的簡單應用程式上。2 如果將屬性設定成 pooled,my...

關於Spring中dataSource的配置

1。一般的配置方法,直接在配置中指定其值。具體的例子我們參照mysql的配置如下 com.mysql.jdbc.driver jdbc mysql service path 3306 database 2.通過讀取檔案資訊資源,其原理與方法一相同。示例 web inf files.propertie...

多個HttpSecurity的配置

author fei date 2021 1 3 2 17 下午 因為這邊是配置的多個httpsecurity,所以就不需要再繼承 websecurityconfigureradapter 了 接下來開始定義靜態內部類 configuration order 1 order標記定義了元件的載入順序,...