Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問題
1 前言
在使用單個服務(wù),多數(shù)據(jù)源時,也存在分布式事務(wù)問題。
當(dāng)單體系統(tǒng)需要訪問多個數(shù)據(jù)庫(實例)時就會產(chǎn)生分布式事務(wù)。 比如:用戶信 息和訂單信息分別在兩個MySQL實例存儲,用戶管理系統(tǒng)刪除用戶信息,需要分別刪除用戶信息及用戶的訂單信 息,由于數(shù)據(jù)分布在不同的數(shù)據(jù)實例,需要通過不同的數(shù)據(jù)庫鏈接去操作數(shù)據(jù),此時產(chǎn)生分布式事務(wù)。 簡言之:跨數(shù)據(jù)庫實例產(chǎn)生分布式事務(wù)。

2 問題場景
參考此文檔搭建一個多數(shù)據(jù)源項目Mybatis-Plus入門系列(19) -多數(shù)據(jù)源使用詳解。
在插入訂單數(shù)據(jù)時,模擬一個異常:
@Override
@DS("db_order")
@Transactional
public void insertOrder() {
// 插入訂單
OrderTbl orderTbl = new OrderTbl();
orderTbl.setUserId("12");
orderTbl.setCommodityCode("IPHONE 13");
orderTbl.setCount(1);
orderTblMapper.insert(orderTbl);
int i = 5 / 0;
}當(dāng)進(jìn)行業(yè)務(wù)操作時,訂單發(fā)生異常 ,進(jìn)行了回滾操作,因為在不同的數(shù)據(jù)庫實例中,余額卻扣除成功,此時發(fā)現(xiàn)數(shù)據(jù)不一致問題。
3 使用Seata 解決多數(shù)據(jù)源事務(wù)問題
3.1 集成Nacos Seata
參考該系列,給當(dāng)前服務(wù)添加Nacos Seata 相關(guān)依賴,并啟動Nacos Seata 。
3.2 多數(shù)據(jù)源集成Seata
多數(shù)據(jù)源集成Seata 時,主要是需要修改一下幾個配置即可。
多數(shù)據(jù)源中,開啟分布式事務(wù),設(shè)置事務(wù)模式:
datasource:
# 多數(shù)據(jù)源
dynamic:
# 省略其他
# 開啟分布式事務(wù)
seata: true
# 事務(wù)模式 為AT
seata-mode: ATseata 中,關(guān)閉數(shù)據(jù)源自動代理
seata: # 是否開啟spring-boot自動裝配,默認(rèn)true,包括數(shù)據(jù)源的自動代理以及GlobalTransactionScanner初始化 enabled: true # 是否開啟數(shù)據(jù)源自動代理,默認(rèn)開啟 enable-auto-data-source-proxy: false
3.3 測試
添加@GlobalTransactional注解。
@GlobalTransactional
@GetMapping("/test")
public Object test() throws InterruptedException {
accountTblService.reduceMoney();
orderTblService.insertOrder();
return "執(zhí)行完畢!";
}測試發(fā)現(xiàn),異常時,余額和訂單服務(wù)都進(jìn)行了回滾,集成成功。

到此這篇關(guān)于Seata集成Mybatis-Plus多數(shù)據(jù)源的文章就介紹到這了,更多相關(guān)Seata集成Mybatis-Plus多數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC實現(xiàn)controller中獲取session的實例代碼
本篇文章主要介紹了SpringMVC實現(xiàn)controller中獲取session的實例代碼,具有一定的參考價值,有興趣的可以了解一下。2017-02-02
詳解IDEA使用Maven項目不能加入本地Jar包的解決方法
這篇文章主要介紹了詳解IDEA使用Maven項目不能加入本地Jar包的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a
這篇文章主要介紹了Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02
idea2019.2安裝MybatisCodeHelper插件的超詳細(xì)教程
這篇文章主要介紹了idea2019.2安裝MybatisCodeHelper插件的教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
springboot配置多數(shù)據(jù)源的一款框架(dynamic-datasource-spring-boot-starter
dynamic-datasource-spring-boot-starter 是一個基于 springboot 的快速集成多數(shù)據(jù)源的啟動器,今天通過本文給大家分享這款框架配置springboot多數(shù)據(jù)源的方法,一起看看吧2021-09-09

