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.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-seataartifactId>
        <version>2023.0.1version>
        <exclusions>
            <exclusion>
                <groupId>io.seatagroupId>
                <artifactId>seata-spring-boot-starterartifactId>
            exclusion>
        exclusions>
    dependency>
    
    <dependency>
        <groupId>io.seatagroupId>
        <artifactId>seata-spring-boot-starterartifactId>
        <version>2.0.0version>
    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使用说明


spring-cloud-starter-alibaba-seata使用说明_第1张图片

你可能感兴趣的:(架构设计,Java,spring,seata,java,springcloud,spring)