精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在 Spring Boot 中集成 Seata,解決分布式事務?

云計算 分布式
本文將詳細介紹如何在 Spring Boot 項目中集成 Seata,并通過具體的代碼案例實現分布式事務管理。以下內容包括配置、代碼實現以及一些注意事項,幫助你快速上手。

在分布式系統中,服務之間往往涉及多個數據庫操作,這就需要一個可靠的分布式事務解決方案來確保數據的一致性。Seata(Simple Extensible Autonomous Transaction Architecture)是一個開源的分布式事務解決方案,提供了高性能和易用的分布式事務服務。

本文將詳細介紹如何在 Spring Boot 項目中集成 Seata,并通過具體的代碼案例實現分布式事務管理。以下內容包括配置、代碼實現以及一些注意事項,幫助你快速上手。

整體步驟

1、準備工作:

  • 搭建 Seata Server 環境
  • 創建兩個模擬服務 order-service 和 account-service,分別代表訂單和賬戶的服務
  • 準備一個 Eureka/Nacos 注冊中心(推薦 Nacos)

2、配置 Seata:

  • 在項目中引入 Seata 依賴
  • 配置 Seata 客戶端
  • 配置數據源代理

3、代碼實現:

  • 使用 @GlobalTransactional 注解實現全局事務管理
  • 編寫業務邏輯和分布式事務示例

環境搭建

1、下載并啟動 Seata Server

從 Seata 官方倉庫下載 Seata Server:https://github.com/seata/seata/releases。解壓后,修改 conf/registry.conf 文件,將注冊中心改為 Nacos:

registry {
  type = "nacos"

  nacos {
    serverAddr = "localhost:8848"  # Nacos 服務地址
    namespace = ""                 # Nacos 命名空間
    cluster = "default"
  }
}

config {
  type = "nacos"

  nacos {
    serverAddr = "localhost:8848"
    namespace = ""
    group = "SEATA_GROUP"
  }
}

啟動 Seata Server:

sh bin/seata-server.sh

依賴引入

在兩個 Spring Boot 項目中添加以下依賴:

<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.6.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2021.0.4.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2021.0.4.0</version>
</dependency>

配置文件詳解

以下是 application.yml 配置文件示例(order-service 和 account-service 的配置基本相同,區別僅在服務名上)。

order-service 配置

server:
  port: 8081

spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/order_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 123456
    type: com.zaxxer.hikari.HikariDataSource

mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml

seata:
  enabled: true
  tx-service-group: my_tx_group  # 事務組名,與 Seata Server 配置一致

account-service 配置

server:
  port: 8082

spring:
  application:
    name: account-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/account_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 123456
    type: com.zaxxer.hikari.HikariDataSource

mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml

seata:
  enabled: true
  tx-service-group: my_tx_group  # 事務組名

數據庫表設計

訂單表 order_tbl

CREATE TABLE order_tbl (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(64) NOT NULL,
  product_id VARCHAR(64) NOT NULL,
  count INT NOT NULL,
  money DECIMAL(10,2) NOT NULL,
  status INT DEFAULT 0 COMMENT '0:待支付, 1:已支付'
);

賬戶表 account_tbl

CREATE TABLE account_tbl (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(64) NOT NULL,
  total DECIMAL(10,2) NOT NULL,
  used DECIMAL(10,2) NOT NULL,
  residue DECIMAL(10,2) NOT NULL
);

核心代碼實現

1、全局事務注解

Seata 提供了 @GlobalTransactional 注解,用于在分布式事務中管理多個服務調用。

2、OrderService 示例

OrderService 中模擬訂單創建邏輯,同時調用 AccountService 扣減賬戶余額。

代碼實現
@Service
@Slf4j
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private AccountClient accountClient; // Feign 客戶端調用 AccountService

    @GlobalTransactional(name = "create-order-transaction", rollbackFor = Exception.class)
    public void createOrder(String userId, String productId, int count, BigDecimal money) {
        log.info("-----> 開始新建訂單");
        Order order = new Order();
        order.setUserId(userId);
        order.setProductId(productId);
        order.setCount(count);
        order.setMoney(money);
        order.setStatus(0);
        orderMapper.insert(order);

        log.info("-----> 訂單服務調用賬戶,開始扣減余額");
        accountClient.decreaseAccount(userId, money);
        log.info("-----> 訂單服務調用賬戶,扣減余額完成");

        log.info("-----> 修改訂單狀態為已完成");
        order.setStatus(1);
        orderMapper.updateById(order);

        log.info("-----> 訂單處理結束");
    }
}
Mapper 層
@Mapper
public interface OrderMapper extends BaseMapper<Order> {}

3、AccountService 示例

AccountService 中實現賬戶余額的扣減邏輯。

代碼實現
@Service
@Slf4j
public class AccountService {

    @Autowired
    private AccountMapper accountMapper;

    public void decreaseAccount(String userId, BigDecimal money) {
        log.info("-----> 扣減賬戶余額開始");
        accountMapper.decrease(userId, money);
        log.info("-----> 扣減賬戶余額結束");
    }
}
Mapper 層
@Mapper
public interface AccountMapper {

    @Update("UPDATE account_tbl SET residue = residue - #{money}, used = used + #{money} WHERE user_id = #{userId}")
    void decrease(@Param("userId") String userId, @Param("money") BigDecimal money);
}

4、Feign Client 示例

@FeignClient(name = "account-service")
public interface AccountClient {

    @PostMapping("/account/decrease")
    void decreaseAccount(@RequestParam("userId") String userId, @RequestParam("money") BigDecimal money);
}

測試分布式事務

啟動服務后,通過 Postman 或其他工具發送請求:

curl -X POST http://localhost:8081/order/create \
     -H "Content-Type: application/json" \
     -d '{
           "userId": "1",
           "productId": "1",
           "count": 10,
           "money": 100.00
         }'

重要注意事項

1、Seata Undo Log 表: 在每個數據庫中創建 undo_log 表,供 Seata 記錄回滾日志。

CREATE TABLE undo_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    branch_id BIGINT NOT NULL,
    xid VARCHAR(128) NOT NULL,
    context VARCHAR(128) NOT NULL,
    rollback_info LONGBLOB NOT NULL,
    log_status INT NOT NULL,
    log_created DATETIME NOT NULL,
    log_modified DATETIME NOT NULL,
    UNIQUE KEY ux_undo_log (xid, branch_id)
);

2、Seata 配置中心: 確保 Seata Server 的配置與服務端一致,事務組名必須統一。

總結

通過以上配置和代碼示例,我們實現了基于 Seata 的分布式事務管理。在實際項目中,可以根據業務需求靈活調整服務和表設計,確保數據一致性。

如果需要更深入的優化或其他集成方法,可以進一步研究 Seata 的 AT、TCC 模式以及高可用配置。

責任編輯:武曉燕 來源: 架構師秋天
相關推薦

2022-03-24 07:51:27

seata分布式事務Java

2022-06-27 08:21:05

Seata分布式事務微服務

2025-04-30 10:44:02

2024-10-09 14:14:07

2022-06-21 08:27:22

Seata分布式事務

2020-12-09 09:14:57

SpringCloudSeata 分布式

2025-04-28 00:44:04

2022-07-10 20:24:48

Seata分布式事務

2020-12-08 11:43:03

Spring Clou分布式Seata

2025-05-07 00:10:00

分布式事務TCC模式

2025-08-27 09:11:48

2021-04-23 08:15:51

Seata XA AT

2023-11-06 13:15:32

分布式事務Seata

2022-06-14 10:47:00

分布式事務數據

2024-08-19 09:05:00

Seata分布式事務

2020-04-28 12:18:08

Seata模式分布式

2022-01-12 10:02:02

TCC模式 Seata

2022-07-03 14:03:57

分布式Seata

2023-01-06 09:19:12

Seata分布式事務

2020-05-28 09:35:05

分布式事務方案
點贊
收藏

51CTO技術棧公眾號

国产精品亚洲综合色区韩国| 日韩视频在线观看一区二区| 神马久久资源| 秋霞午夜鲁丝一区二区 | 福利精品视频| 国产欧美日韩中文久久| 日韩伦理av| 国产一级特黄a大片免费| 精品国产3级a| 国产精品xvideos88| 亚洲网站免费观看| 欧美日韩在线精品一区二区三区| 亚洲欧美日韩系列| 亚洲欧洲二区| 五月天色婷婷丁香| 国产精品久久久久久久app| 91碰在线视频| av在线播放资源| 久草免费资源站| 久久免费视频观看| 97久久精品人人澡人人爽| 人狥杂交一区欧美二区| 一区二区三区免费在线观看视频| 9.1国产丝袜在线观看| 91免费视频大全| 桃子视频成人app| 手机看片日韩av| 成人国产精品一区二区| 亚洲欧洲另类国产综合| 国产一精品一av一免费爽爽| 欧美激情精品久久| 久久国产精品-国产精品| 91久久国产最好的精华液| 日本午夜一区| 国产成人精品一区二区无码呦| 青青在线免费视频| 日韩精品视频在线观看免费| 美女脱光内衣内裤视频久久影院| 精品国产白色丝袜高跟鞋| 国产艳妇疯狂做爰视频| 国产精品久久久久免费a∨大胸| 亚洲欧洲日韩女同| 国产日产精品一区二区三区四区的观看方式 | 精品国产第一福利网站| 国产精品视频看看| 7777精品伊久久久大香线蕉语言| 精品动漫一区二区| 中文在线日韩| seseavlu视频在线| 精品熟女一区二区三区| 91亚洲va在线va天堂va国| 婷婷开心激情综合| 黄色国产精品| av在线看片| 亚洲 欧美 国产 另类| 久久国产精品一区二区三区| 日韩欧美在线网站| 精品无码三级在线观看视频| 成人免费毛片嘿嘿连载视频…| 久久久香蕉视频| 永久免费网站视频在线观看| 中文字幕久精品免费视频| 久久美女艺术照精彩视频福利播放 | 天堂网在线播放| 国产探花在线观看视频| 91免费看片网站| 欧美高清视频在线高清观看mv色露露十八 | 国产精品白丝av嫩草影院| 精品国产av 无码一区二区三区| 日本免费观看网站| 国产欧美在线播放| 欧美精品乱码久久久久久按摩| 亚洲永久字幕| 成人做爰免费视频免费看| 欧美a视频在线观看| 亚洲第一中文av| 91中文在线视频| 日韩精品一区二| 97久久精品人人爽人人爽蜜臀| 精品国产一区二区三区久久久樱花| 免费一级毛片在线观看| 毛片aaaaaa| 成年人网站免费视频| 日韩免费在线播放| 884aa四虎影成人精品一区| 国产精品资源在线观看| 欧美男人操女人视频| 麻豆视频在线播放| 五月天婷婷网站| 美女喷白浆视频| 超碰97在线人人| 在线观看日韩专区| 午夜欧美一区二区三区在线播放| 人禽交欧美网站| 国内精品偷拍| 蜜芽在线免费观看| 亚洲另类欧美日韩| 四川一级毛毛片| 一区二区三区四区免费视频| 91精品国产91久久久久久吃药 | 日韩精品福利片午夜免费观看| 91av在线免费观看视频| 日韩午夜激情av| 国产精品网友自拍| 久久国产精品久久w女人spa| 美女日韩一区| 在线h片观看| 亚洲综合网av| 国产精品九九九九九九| 日韩av在线中文| 日韩精品国内| 青青精品视频播放| 国产亚洲欧美日韩美女| 色婷婷av一区二区三区之一色屋| av中文字幕不卡| 亚洲一区二区三区高清| 韩国精品福利一区二区三区| 青春草在线视频| 丰满熟妇乱又伦| 日韩欧美一区二区一幕| 少妇被狂c下部羞羞漫画| 日韩欧美精品免费| 久久国产主播精品| 国产精品久久久久久av福利| 一区二区欧美在线| 精品视频免费在线| 亚洲私人黄色宅男| 久久久久国产精品免费免费搜索| 精品美女久久| 中文字幕视频一区二区| 福利所第一导航| 精品国产乱码久久久久夜深人妻| 亚洲va男人天堂| 久久网站最新地址| 国产福利资源一区| 成人短视频软件网站大全app| 台湾av在线二三区观看| 91九色02白丝porn| 欧美综合在线视频观看| 免费a级人成a大片在线观看| 精品久久人妻av中文字幕| 久久亚洲AV无码| 一级黄色片大全| 男人的天堂99| 国产欧美日韩小视频| 99视频国产精品免费观看| 国内精品久久久久久久影视蜜臀| 国产精品18p| 欧美性猛交xx| 成人免费观看在线| 正在播放一区| 欧美激情在线视频二区| 日韩精品中文字幕一区二区三区| 欧美自拍偷拍一区| 天天射综合影视| 亚洲欧洲综合另类| 成人av免费观看| 成人国产精品免费网站| 国产成人av自拍| 婷婷午夜社区一区| 韩国福利在线| 天天操天天操天天操| 亚洲精品久久久久avwww潮水| 中文字幕乱码视频| 亚洲成a人无码| 高潮无码精品色欲av午夜福利| 日韩在线视频不卡| 国产精品乡下勾搭老头1| 欧洲精品一区色| 在线观看爽视频| 亚洲男女性事视频| 久久高清免费视频| 99在线热播精品免费99热| 日韩**中文字幕毛片| 亚洲AV成人无码一二三区在线| 一区二区三区日本| 国产精品久久久久免费| 久久天天东北熟女毛茸茸| 国产男女免费视频| 免费毛片小视频| 伊人影院在线观看视频| 亚洲乱妇老熟女爽到高潮的片 | 亚洲黄色免费视频| √天堂中文官网8在线| 69亚洲精品久久久蜜桃小说| 激情福利在线| av小次郎在线| japanese色系久久精品| 国产剧情一区二区在线观看| 精品国产福利在线| 人人人妻人人澡人人爽欧美一区| 日韩视频不卡| 乱一区二区三区在线播放| 日韩欧美看国产| 久久不射电影网| 一级淫片免费看| 亚洲一区二区四区蜜桃| 无码人妻精品一区二区三应用大全| 视频一区二区三区中文字幕| 亚洲一卡二卡| www.丝袜精品| 久久精品国产亚洲| 五月激情婷婷网| 欧美视频一二三区| 国产一二三av| 成人永久看片免费视频天堂| 欧美精品一区免费| 91精品国产成人观看| 九9re精品视频在线观看re6| 欧美一级在线| 日本精品va在线观看| 激情小视频在线观看| 欧美精品一区二区三区蜜臀 | 亚洲成人免费在线观看| 国产传媒第一页| 激情都市一区二区| 日本www在线视频| 亚洲视频分类| 国产美女精品视频| 国产福利电影在线播放| www.xxxx欧美| 亚洲精品18p| 欧美色倩网站大全免费| 久草国产精品视频| 久久一二三国产| www国产视频| 成人一区二区三区视频| 97视频在线免费观看| 国产精品一区二区三区四区色| 精品久久一区二区三区| 一区二区三区在线免费观看视频| 午夜精品久久久久久久久久| 欧美极品少妇xxxxⅹ喷水| 黄色免费在线播放| 日韩欧美成人激情| 在线观看国产区| 狠狠色香婷婷久久亚洲精品| 精品少妇一二三区| 亚洲激情自拍视频| 日本a级片视频| 亚洲三级在线看| sm捆绑调教视频| 中文字幕巨乱亚洲| 美女脱光内衣内裤| 国产自产高清不卡| 黄大色黄女片18第一次| 免播放器亚洲一区| 999在线免费视频| 老司机亚洲精品| 黑鬼大战白妞高潮喷白浆| 亚洲在线黄色| 日韩国产欧美亚洲| 国产精品毛片在线| 69堂免费视频| 在线不卡亚洲| 久久精品xxx| 国产一区激情| 性一交一乱一伧国产女士spa| 欧美1区视频| 亚洲爆乳无码精品aaa片蜜桃| 你懂的亚洲视频| 免费网站在线观看视频| 欧美日韩少妇| 国产69精品久久久久久久| 国产一区二区你懂的| 九九九九免费视频| 日本在线不卡一区| 日本高清久久久| 国内高清免费在线视频| 色8久久精品久久久久久蜜| www.av88| 欧美日韩www| 永久免费无码av网站在线观看| 91福利在线导航| 国产伦精品一区二区三区视频痴汉| 在线成人免费视频| 国产丰满美女做爰| 337p日本欧洲亚洲大胆精品 | av网页在线观看| 91亚洲午夜精品久久久久久| 亚洲AV无码片久久精品| 国产欧美日韩激情| 国产chinese中国hdxxxx| 久久久久久影视| 国产传媒免费在线观看| 亚洲va欧美va人人爽午夜| 日本午夜小视频| 欧美性xxxx极品hd满灌| 在线播放国产一区| 欧美熟乱第一页| www.久久色| 亚洲电影免费观看高清| 91激情在线| 欧美激情视频网站| yjizz视频网站在线播放| 亚洲色图狂野欧美| 色网在线观看| 91高清免费视频| 97久久中文字幕 | 青青草原综合久久大伊人精品 | 国产又粗又猛又爽又黄av| 国产精品欧美一级免费| 精品处破女学生| 亚洲国产成人av| 国产精品久久久国产盗摄| 久久资源在线| 五月天色婷婷综合| 一本色道久久综合| 国产精品99久久免费黑人人妻| 黄色资源网久久资源365| 性欧美18—19sex性高清| 国产在线国偷精品产拍免费yy| 中文字幕一区二区三区乱码不卡| 成人av免费网站| 欧洲猛交xxxx乱大交3| 欧美怡红院视频| 久久国产精品二区| 亚洲成av人片www| 久久午夜夜伦鲁鲁片| 一区二区三区国产| 国产精品无码天天爽视频| 亚洲一区二区久久| 色吧亚洲日本| 国产欧美日韩一区| 亚洲精品一区二区在线看| 久章草在线视频| 91在线视频在线| 精品无码免费视频| 日韩视频一区二区三区在线播放| 天堂中文8资源在线8| 国产成人福利视频| 中文字幕中文字幕精品| 99精品人妻少妇一区二区 | 成人免费激情视频| yourporn在线观看中文站| 日韩丝袜美女视频| 最新国产露脸在线观看| 国产精品色婷婷视频| 女厕嘘嘘一区二区在线播放 | 丝袜脚交一区二区| 37p粉嫩大胆色噜噜噜| 天天综合天天综合色| 国产91久久久| 久久久久久久久国产| gogo人体一区| 欧美日韩精品在线一区二区 | 手机精品视频在线观看| 亚洲AV无码国产精品| 岛国av一区二区三区| 四虎在线视频| 日韩免费观看av| 精品一二三区| 尤物国产在线观看| 日韩一区日韩二区| 国产乱淫av免费| 久久久精品在线| 亚洲码欧美码一区二区三区| 青青青青在线视频| eeuss鲁片一区二区三区在线观看| 日本一区二区网站| 精品一区二区三区电影| 成人午夜视屏| 亚洲va久久久噜噜噜久久狠狠 | 日韩精品xxx| 亚洲国产精品影院| 婷婷色在线观看| 国产成人精品在线视频| 日韩理论电影中文字幕| 日本xxxxxxx免费视频| 国产精品久久久久婷婷| japanese国产| 91精品国产高清自在线看超| 国产毛片一区二区三区| 日韩欧美国产片| 曰韩精品一区二区| 亚洲人在线观看视频| 国产精品久久久久久久久久ktv| 欧美大人香蕉在线| 欧美一区二区三区影院| 亚洲成人免费av| 福利片在线看| 98国产高清一区| 久久久久国产精品一区三寸| 精品少妇一区二区三区密爱| 精品美女在线观看| 精品免费av在线| 国产视频在线观看网站| 久久人人97超碰com| 中文字幕日韩第一页| 日韩视频免费在线观看| 欧美影院在线| 日本xxxxxxx免费视频| 亚洲一区二区三区在线看 | 美女福利视频一区| 四虎5151久久欧美毛片| 色综合天天色综合| 亚洲成av人片在线| 免费大片黄在线观看视频网站| 韩国成人一区| 国产主播一区二区三区|