mybatis plus+dynamic事務導致多數據源切換失敗


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

事務控制






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM