記錄一次成功的資料來源熱切換

2021-09-26 14:52:28 字數 543 閱讀 2790

因業務線越做越大,需要將資料庫進行拆分隔離。因此梳理已有的十餘個服務,需要進行兩種方式的拆分。一種是整個服務的資料來源全量遷移,一種是服務中庫表需部分遷移,需做雙資料來源。

接著分析發現需做雙資料來源的服務屬於基礎服務,更新不會很頻繁,因此做靜態上線——即配置雙資料來源。dba做表全量遷移,之後服務發布上線。需要資料來源全量遷移的服務屬於實時要求高的服務,訪問量高,不可停機維護。因此採用熱切換。

1. **部分: 使用spring提供的abstractroutingdatasource類,進行對當前資料來源的監聽。另外新寫切面判斷apollo開關是否開啟,如開啟則使用新資料來源。

需要注意,部分註解會使abstractroutingdatasource的動態資料來源監聽失效,如@transaction註解。因為事務註解的執行順序優先於自己建的切換資料來源的切面,此時需要配置order順序保證資料來源切換優先執行。

2. dba準備:    在切換的前五分鐘做好從老庫到新庫的雙寫,保證新庫資料的同步性。在切換後做老庫和新庫流量的監控。

目前線上已成功熱切換, 求star :)

Spring MyBatis多資料來源的切換

這兩個類的類名可以根據自己的編碼習慣命名,我的命名及實現 如下 1 datasourcecontextholder 用於進行資料來源的獲取 設定及還原 package com.cpms.trasen.common.tk import org.slf4j.logger import org.slf4j...

SpringBoot中的雙資料來源切換

在我們的專案中涉及到oracle,mysql資料庫切換 資料放在了oracle上,而配置和許可權管理放在了mysql上 所以經常要在兩者之間切換。資料來源切換總共有三種方法 1 在任何地方切換。例如我們的專案 dbcontext.changedb dbname.ims.getkey 切換oracle...

mybatisPlus的切換資料來源失效問題。

使用mybatisplu的動態切換資料來源時,遇到無法切換的問題 原因是具體操作的服務呼叫的是非同步執行緒 mp的切換資料來源資訊是放在threadlocal中去儲存的,如果切換了執行緒,那麼就取不到資料來源資訊的內容,導致無法切換資料來源的問題 對於這種情況,如果非同步有存在的必要性 那麼可以將這...