SpringBoot+MyBatis+MySQL讀寫分離(例項)

1. 引言
讀寫分離要做的事情就是對於一條SQL該選擇哪個資料庫去執行,至於誰來做選擇資料庫這件事兒,無非兩個,要麼中介軟體幫我們做,要麼程式自己做。因此,一般來講,讀寫分離有兩種實現方式。第一種是依靠中介軟體(比如:MyCat),也就是說應用程式連線到中介軟體,中介軟體幫我們做SQL分離;第二種是應用程式自己去做分離。這裡我們選擇程式自己來做,主要是利用Spring提供的路由資料來源,以及AOP。
然而,應用程式層面去做讀寫分離最大的弱點(不足之處)在於無法動態增加資料庫節點,因為資料來源配置都是寫在配置中的,新增資料庫意味著新加一個數據源,必然改配置,並重啟應用。當然,好處就是相對簡單。

2. AbstractRoutingDataSource
基於特定的查詢key路由到特定的資料來源。它內部維護了一組目標資料來源,並且做了路由key與目標資料來源之間的對映,提供基於key查詢資料來源的方法。

3. 實踐
關於配置請參考:
https://www.cnblogs.com/cjsblog/p/9706370.html
3.1. maven依賴






這裡,我們配置了4個數據源,1個master,2兩個slave,1個路由資料來源。前3個數據源都是為了生成第4個數據源,而且後續我們只用這最後一個路由資料來源。
MyBatis配置

由於Spring容器中現在有4個數據源,所以我們需要為事務管理器和MyBatis手動指定一個明確的資料來源。
3.3. 設定路由key / 查詢資料來源
目標資料來源就是那前3個這個我們是知道的,但是使用的時候是如果查詢資料來源的呢?
首先,我們定義一個列舉來代表這三個資料來源
packagecom.cjs.example.enums;
publicenumDBTypeEnum {
MASTER, SLAVE1, SLAVE2;
}
接下來,通過ThreadLocal將資料來源設定到每個執行緒上下文中




例如,假設我們有一張表member

4. 測試

檢視控制檯


5. 工程結構

擴充套件閱讀
Springboot + Mybatis,資料庫多資料來源配置專案Demo【原始碼下載】
SpringBoot ( 七 ) :springboot + mybatis 多資料來源最簡解決方案
某小公司 RESTful、共用介面、前後端分離、介面約定的實踐
來源:http://www.cnblogs.com/cjsblog/p/9712457.html