1. 程式人生 > 實用技巧 >mybatis plus+dynamic事務導致多資料來源切換失敗

mybatis plus+dynamic事務導致多資料來源切換失敗

mybatis plus+dynamic多資料來源切換失敗
方法1:分開呼叫
方法2:呼叫另一個數據源的方法的時候重新開啟事務,或者掛起當前事務TOC

mybatis plus+dynamic多資料來源切換失敗

今天測試介面的時候方法,多資料來源插入資料異常了,開始以為是mybatis plus的basemapper的介面不能多資料來源,研究了一下,發現dynamic貌似是mybatis plus一家開發的,不會有這個問題,倒騰半天發現是分散式事務的原因.....

現象:在service層一個方法中開啟事務,分別向多個數據源中插入資料,但是後面的插入操作使用的是第一個資料來源的配置,導致插入時由於表不存在異常

問題:mybatis plus+dynamic多資料來源配置很簡單,正常的查詢的時候也不會有異常,但是在事務中切換多資料就會失敗,使用了是第一層方法對應的資料來源;

原因:dynamic不能處理分散式事務,開啟一個事務之後,呼叫另一個數據源的方法不會切換事務,不會切換資料來源

在若是不需要分散式事務的情況下,想要解決有以下方法

方法1:分開呼叫

若事務預設在service類上開啟,可以改為在controller層分別呼叫兩個資料來源的方法

若是事務是在具體的方法上,保證切換資料來源的時候沒有開啟事務即可

方法2:呼叫另一個數據源的方法的時候重新開啟事務,或者掛起當前事務

@Transactional(readOnly = false, rollbackFor = {Exception.class, RuntimeException.class},propagation = Propagation.REQUIRES_NEW) //我使用的是開啟新事務

//新的資料來源設定propagation處理事務,PROPAGATION_REQUIRES_NEW,PROPAGATION_NOT_SUPPORTED都行

事務控制



來自為知筆記(Wiz)