1. 程式人生 > >多個datasource的配置與實現原理

多個datasource的配置與實現原理

      一般情況下,一個專案中只會有一個datasource,但是在某些情況、或者業務需求的情況下會出現一個專案有多個datasource的情況,當滿足一定條件的時候,對資料庫的操作就會從一個一個datasource切換到另一個datasource. 那麼這種多資料來源的配置與實現原理是什麼樣的?      一、spring boot 下配置多個數據源:         https://blog.csdn.net/u013412772/article/details/79833262   二、實現原理:         目前持久層框架常用的就是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介面、類的定義:
,從上圖可以看出,transaction這個定義在很多地方使用。實際上,只要是需要通過網路進行通訊的功能,都會有這麼一個類似datasource的東西來儲存通訊時的必要配置資訊(url、埠、超時時間、協議等等···),這個東西可能叫做datasource,也可能叫做其他名字,但他其實底層本質就是一個socket,通過層層封裝與抽象來提供給大家使用。  所以就算不使用spring boot的那一套配置,自己也能實現多資料來源的切換,無非就是先定義多個datasource的bean例項出來,然後根據專案中使用的持久層框架的不同來重寫Transaction介面中的方法(也可能是其他介面,主要是看框架操作datasource時是怎麼定義的介面,然後再實現該介面就可以了)。以上雖然短短几句話就說完了,以後有時間再貼出自己實現的多個數據源的實現程式碼。 &nbs