当前位置: 首页 > news >正文

spring-cloud-starter-alibaba-seata使用说明


Spring Cloud Alibaba Seata 使用说明

spring-cloud-starter-alibaba-seata 是 Spring Cloud Alibaba 生态中用于集成分布式事务框架 Seata 的核心组件,支持 AT(自动补偿)TCC(手动补偿) 等模式。


一、依赖配置
  1. 添加依赖
    pom.xml 中引入 Seata 客户端依赖,需注意版本兼容性(如 Spring Boot 3.4 需搭配 Seata 2.0+):

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
        <version>2023.0.1</version>
        <exclusions>
            <exclusion>
                <groupId>io.seata</groupId>
                <artifactId>seata-spring-boot-starter</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 手动指定 Seata 版本 -->
    <dependency>
        <groupId>io.seata</groupId>
        <artifactId>seata-spring-boot-starter</artifactId>
        <version>2.0.0</version>
    </dependency>
    
  2. 排除默认数据源代理
    避免与 Spring Boot 自动配置冲突,需在启动类或配置类中禁用默认代理:

    seata:
      enable-auto-data-source-proxy: false  # 关闭自动代理
    

二、配置文件设置

application.yml 中配置 Seata 核心参数:

spring:
  cloud:
    alibaba:
      seata:
        tx-service-group: my_tx_group_v3  # 事务组名,需全局唯一
        service:
          vgroup-mapping:
            my_tx_group_v3: default       # 映射到 Seata Server 分组
          grouplist:
            default: 127.0.0.1:8091        # Seata Server 地址
# 注册中心配置(以 Nacos 为例)
seata:
  registry:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848          # Nacos 地址
      namespace: dev                       # 环境隔离
      group: SEATA_GROUP

三、数据源代理配置

通过 DataSourceProxy 包装原生数据源,确保 Seata 拦截 SQL 操作:

@Configuration
public class SeataConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
    
    @Primary
    @Bean("dataSource")
    public DataSourceProxy dataSourceProxy(DataSource dataSource) {
        return new DataSourceProxy(dataSource);  // 关键代理
    }
}

四、全局事务启用

在需要分布式事务的业务方法上添加 @GlobalTransactional 注解:

@Service
public class OrderService {
    @GlobalTransactional(
        name = "createOrderTx", 
        timeoutMills = 60000,
        rollbackFor = Exception.class
    )
    public void createOrder(OrderDTO order) {
        // 调用其他微服务(如扣减库存、账户扣款)
        inventoryClient.deduct(order.getProductId());
        accountClient.deduct(order.getUserId(), order.getAmount());
        // 本地事务操作(如插入订单记录)
        orderMapper.insert(order);
        if (order.getAmount() > 100000) {
            throw new BusinessException("金额超限,触发全局回滚"); 
        }
    }
}

五、注意事项与常见问题
  1. 事务分组一致性
    • 所有参与事务的微服务需配置相同的 tx-service-group,并与 Seata Server 的配置匹配。
    • 示例:服务 A 和 B 的 tx-service-group 均需为 my_tx_group_v3

  2. 数据源代理冲突
    • 若使用多数据源,需为每个数据源手动创建代理,并指定 @Primary 注解。

  3. 版本兼容性
    • Seata 2.0+ 仅支持 JDK 17+,需与 Spring Boot 3.x 及以上版本搭配。

  4. XID 传播
    • 确保 seata-spring-boot-starter 正确传递 XID(事务 ID),避免因 Filter 顺序问题导致链路中断。


总结

通过 spring-cloud-starter-alibaba-seata,开发者可通过 注解驱动 快速实现分布式事务管理,结合 Nacos 注册中心与配置中心,构建高可用的微服务架构。核心步骤包括:依赖引入 → 配置调整 → 数据源代理 → 事务注解。实际应用中需特别注意版本兼容性、事务分组一致性及数据源代理配置,避免常见陷阱。

拓展

Seata使用详解

spring-cloud-alibaba使用说明


在这里插入图片描述

http://www.dtcms.com/a/122672.html

相关文章:

  • C++ RAII 的用途及业务代码实现案例
  • 20周年系列|美创科技再度入围「年度高成长企业」系列榜单
  • 鸿蒙NEXT开发Preferences工具类(ArkTs)
  • Python生成器与列表的对照使用详解
  • 2025高教社杯全国大学生数学建模竞赛——5个月备赛规划
  • Spring Boot 启动后自动执行 Service 方法终极指南
  • 正则表达式补充——python
  • leetcode_707. 设计链表_java
  • Leetcode 34.在排序数组中查找元素的第一个和最后一个位置
  • 游戏引擎学习第211天
  • 毫米波测试套装速递!高效赋能5G/6G、新材料及智能超表面(RIS)研发
  • Stable Diffusion + CelebA-Dialog 数据集:不同数据集文本标签格式不一致?我的实验记录
  • python学智能算法(十)|机器学习逻辑回归(Logistic回归)
  • Django学习记录-2-数据库
  • mysql的下载和安装2025.4.8
  • 计算机网络——传输层(Udp)
  • Java 原型模式 详解
  • 如何在Linux系统上通过命令调用本地AI大模型?
  • qt之opengl使用
  • 【精品PPT】2025固态电池知识体系及最佳实践PPT合集(36份).zip
  • 移动端六大语言速记:第11部分 - 内存管理
  • ChatGPT 4:引领 AI 创作新时代
  • [ctfshow web入门] web29
  • 基于FreeRTOS和LVGL的多功能低功耗智能手表(硬件篇)
  • 微服务篇——SpringCloud
  • 【Ai/Agent】Windows11中安装CrewAI过程中的错误解决记录
  • Python如何用科技点亮触感世界——智能盲文翻译器开发全解析
  • SQL语句
  • 论文阅读笔记:Adaptive Multi-Modal Cross-Entropy Loss for Stereo Matching
  • 封装uniapp request promise化