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使用說明