Spring Cloud Alibaba Seata 使用说明
spring-cloud-starter-alibaba-seata
是 Spring Cloud Alibaba 生态中用于集成分布式事务框架 Seata 的核心组件,支持 AT(自动补偿)、TCC(手动补偿) 等模式。
一、依赖配置
-
添加依赖
在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>
-
排除默认数据源代理
避免与 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: nacosnacos: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("金额超限,触发全局回滚"); }}
}
五、注意事项与常见问题
-
事务分组一致性
• 所有参与事务的微服务需配置相同的tx-service-group
,并与 Seata Server 的配置匹配。
• 示例:服务 A 和 B 的tx-service-group
均需为my_tx_group_v3
。 -
数据源代理冲突
• 若使用多数据源,需为每个数据源手动创建代理,并指定@Primary
注解。 -
版本兼容性
• Seata 2.0+ 仅支持 JDK 17+,需与 Spring Boot 3.x 及以上版本搭配。 -
XID 传播
• 确保seata-spring-boot-starter
正确传递 XID(事务 ID),避免因 Filter 顺序问题导致链路中断。
总结
通过 spring-cloud-starter-alibaba-seata
,开发者可通过 注解驱动 快速实现分布式事务管理,结合 Nacos 注册中心与配置中心,构建高可用的微服务架构。核心步骤包括:依赖引入 → 配置调整 → 数据源代理 → 事务注解。实际应用中需特别注意版本兼容性、事务分组一致性及数据源代理配置,避免常见陷阱。
拓展
Seata使用详解
spring-cloud-alibaba使用说明