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: 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("金额超限,触发全局回滚"); }}
}

五、注意事项与常见问题
  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.mzph.cn/news/900762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题(小白)暴力娱乐篇23

由题意得知给我们一串数字&#xff0c;我们每次交换两位&#xff0c;最少交换多少次成功得到有顺序的数组。我们以平常的思维去思考&#xff0c;加入给你一串数字获得最少的交换次数&#xff0c;意味着你的交换后续基本不会变&#xff0c;比如说2 1 3 5 4 中1与2交换后不变&…

Python基础——Pandas库

对象的创建 导入 Pandas 时&#xff0c;通常给其一个别名“pd”&#xff0c;即 import pandas as pd。作为标签库&#xff0c;Pandas 对象在 NumPy 数组基础上给予其行列标签。可以说&#xff0c;列表之于字典&#xff0c;就如 NumPy 之于 Pandas。Pandas 中&#xff0c;所有数…

Spring入门概念 以及入门案例

Spring入门案例 Springspring是什么spring的狭义与广义spring的两个核心模块IoCAOP Spring framework特点spring入门案例不用new方法&#xff0c;如何使用返回创建的对象 容器&#xff1a;IoC控制反转依赖注入 Spring spring是什么 spring是一款主流的Java EE轻量级开源框架 …

The packaging for this project did not assign a file to the build artifact

问题&#xff1a; maven install报错&#xff1a;The packaging for this project did not assign a file to the build artifact 解决方案&#xff1a; 方案1&#xff1a; 使用mvn clean install 就可以解决问题&#xff0c; 方案2&#xff1a; 找到lifecycle点clean再点…

C++入门一:C++ 编程概述

一、C 语言与 C 的关系&#xff1a;从 “带类的 C” 到独立王国 1.1 血缘关系&#xff1a;C 是 C 的 “超级进化版” 起源&#xff1a;C 由 Bjarne Stroustrup 在 1980 年代开发&#xff0c;最初名为 “C with Classes”&#xff08;带类的 C&#xff09;&#xff0c;旨在为 …

LLM生成文本的 束搜索参数是什么(Beam Search)

LLM生成文本的 束搜索参数是什么(Beam Search) 束搜索(Beam Search)是一种在序列生成任务(如机器翻译、文本生成等)中常用的启发式搜索算法,用于在搜索空间中寻找最优的生成序列。 束搜索的基本概念 在序列生成过程中,每一步都会有多个可能的选择(即候选标记)。 …

Java-多级排序结合thenComparing()

List<User>,user有个字段有值的时候设置1,没值就是null,怎么排序根据这个字段排序? 若要对 List<User> 按照某个字段(如 flag,有值时为 1,无值时为 null)排序,可 以使用 ​​Comparator​​ 结合 null 值处理逻辑。 1. 排序规则说明​​ 假设需求是:…

卷积神经网络(CNN)基础

目录 一、应用场景 二、卷积神经网络的结构 1. 输入层&#xff08;Input Layer&#xff09; 2. 卷积层&#xff08;Convolutional Layer&#xff09; 3. 池化层&#xff08;Pooling Layer&#xff09; 最大池化&#xff08;max_pooling&#xff09;或平均池化&#xff08;…

Android 中集成 Unity 工程的步骤

在 Adroid 项目中集成 Unity 工程,主要步骤如下: 一、前提条件 1、已有一个 Android 工程项目; 2、Unity 工程已导出为 Android 工程,目录大概如下: 二、集成步骤 1、在 Android 工程中导入 Unity 工程的 unityLibrary 模块。 在 Android Studio 中,点击菜单栏 Fil…

热Key问题及其解决方案:Redis高并发场景下的性能优化

目录 一、热Key问题的本质与影响 1.1 什么是热Key&#xff1f; 典型热Key场景&#xff1a; 1.2 热Key造成的技术挑战与业务影响 技术层面影响&#xff1a; 业务层面影响&#xff1a; 二、热Key的科学判定与识别方法 2.1 定量判定标准 QPS集中度指标 资源消耗指标 2.…

2025年智能 ITSM产品推荐

2025年数字经济占GDP比重将突破62%&#xff0c;IT服务管理&#xff08;ITSM&#xff09;系统已成为企业核心竞争力的"数字底座"。根据IDC最新报告&#xff0c;采用AI驱动的智能ITSM系统可使企业运营效率提升41%&#xff0c;故障恢复成本降低58%。本文从智能化水平、产…

动手人形机器人(RL)

1 PPO的讲解 核心步骤&#xff0c;如策略网络和价值网络的定义、优势估计、策略更新、价值更新等基础功能的实现 2 代码构成 可能涉及 初始化&#xff0c;Behavior Clone 3 动手强化学习 import pytorch as torch class actorcritic ##等待补充 4 PD Gains 在机器人学中&…

Mujoco xml模型

Mujoco xml模型 一个例子compileroptionassetmesh default基本使用childclass与class多个class worldbodybody关系inertialjointgeom XML主要分为以下三个部分&#xff1a; < asset> &#xff1a; 用 tag导入STL文件&#xff1b;< worldbody>&#xff1a;用tag定义…

【Redis】背景知识

一、Redis的特性 Redis是一种基于键值对&#xff08;key-value&#xff09;的NoSQL数据库&#xff0c;与很多键值对数据库不同的是&#xff0c;Redis中的值可以是由string&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xf…

Redis的used_memory_peak_perc和used_memory_dataset_perc超过90%会怎么样

当Redis的used_memory_peak_perc&#xff08;当前内存占历史峰值的百分比&#xff09;和used_memory_dataset_perc&#xff08;数据集内存占比&#xff09;均超过90%时&#xff0c;可能引发以下问题及风险&#xff1a; 一、used_memory_peak_perc > 90% 的影响 内存交换风险…

嵌入式---灰度传感器

灰度传感器概览 一、定义与核心功能 1. 定义 灰度传感器是一种基于 光反射原理 的光电传感器&#xff0c;通过检测物体表面对入射光&#xff08;多为红外光或可见光&#xff09;的反射强度&#xff0c;将光信号转换为电信号&#xff0c;从而判断目标物体的 灰度值&#xff0…

0303hooks-react-仿低代码平台项目

文章目录 1. 副作用2.其他内置hooks2.1 useEffect2.2 useRef2.3useMemo2.4 useCallback 3.自定义hooks4. 第三方hooks5. hooks使用原则6. hooks闭包陷阱7. 总结结语 1. 副作用 当组件渲染完成时&#xff0c;加载一个Ajax网络请求当某个state更新时&#xff0c;加载一个Ajax网络…

Zephyr、FreeRTOS、RT-Thread 定时器区别分析

一、核心特性对比 特性ZephyrFreeRTOSRT-Thread定时器类型系统定时器&#xff08;k_timer&#xff09;、硬件定时器软件定时器&#xff08;基于系统tick&#xff09;软件定时器、硬件定时器定时模式单次、周期性单次、自动重载&#xff08;周期性&#xff09;单次、周期、自定…

手撕unique_ptr 和 shareed_ptr

文章目录 unique_ptrshared_ptr unique_ptr template<class T> class Unique_ptr { private:T* ptrNULL; public://1、删除默认的拷贝构造函数Unique_ptr(Unique_ptr& u) delete;//2、删除默认的复制构造Unique_ptr& operator(Unique_ptr& u) delete; …

对比 HashMap 和 ConcurrentHashMap 扩容逻辑的差异

HashMap 和 ConcurrentHashMap 在 扩容逻辑 上有明显的差异&#xff0c;尤其是在并发环境下的处理策略&#xff0c;这是它们核心区别之一。 &#x1f9f1; 一、总体对比表&#xff08;JDK 8 为例&#xff09; 特性HashMapConcurrentHashMap线程安全❌ 否✅ 是是否支持并发扩容…