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都行
