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

Spring Boot项目整合Seata AT模式

目录

    • 1、添加依赖
    • 2.、配置Seata
    • 3、创建AT模式表
    • 4、使用Seata分布式事务

1、添加依赖

	    <dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId></dependency>

上述依赖适用于springboot项目

如果你的项目是springcloud项目,那么可以使用下面这个依赖

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

spring-cloud-starter-alibaba-seata是为Spring Cloud应用程序开发的,可以在Spring Cloud环境中使用,并提供了与Spring Cloud Config、Eureka、Nacos等应用程序所需的集成。它依赖于Spring Cloud Alibaba项目,因此需要引入spring-cloud-starter-alibaba-dependencies的BOM(Bill of Materials),来管理版本依赖关系。

spring-cloud-starter-alibaba-seata推荐依赖配置方式,自定义seata-spring-boot-starter版本

		   <dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>最新版</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>最新版本</version><exclusions><exclusion><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId></exclusion></exclusions></dependency>

2.、配置Seata

在 Spring Boot 应用的配置文件(application.yml 或 application.properties)中配置 Seata 相关参数,例如:

application.yml

seata:enabled: trueapplication-id: your_application_idtx-service-group: default_tx_groupenable-auto-data-source-proxy: truedata-source-proxy-mode: ATservice:vgroup-mapping:default_tx_group: defaultregistry:type: nacosnacos:server-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace:username: nacospassword: nacosconfig:type: nacosnacos:server-addr: 127.0.0.1:8848group: SEATA_GROUPdata-id: seataServer.propertiesnamespace:username: nacospassword: nacos

上面我seata的注册和配置都放到了nacos上,nacos上的配置可以看我上一篇文章:https://blog.csdn.net/qq_36551991/article/details/135968940

注:data-id要与我们nacos创建的配置文件的data-id一致,这里默认的data-id为seata.properties

对于多个服务来说,都需要配置seata,而且注册中心需要一致

3、创建AT模式表

在AT模式下,每个业务数据库都必须创建 undo_log 表,undo_log 表是 Seata AT模式必须创建的表,主要用于分支事务的回滚

表机构地址:https://github.com/apache/incubator-seata/tree/master/script/client/at/db

大家在上面地址选择自己使用的数据库的sql脚本,进行执行,我的数据库是mysql,所以使用的是mysql.sql

Mysql表结构如下:

CREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

4、使用Seata分布式事务

在我们的事务方法上添加@GlobalTransactional注解即可开启全局事务,主服务加上@GlobalTransactional注解即可,被调用服务不用加@GlobalTransactional和@Transactional;

下面是一个示例样板:

   //seata全局事务注解@GlobalTransactional (rollbackFor=Exception.class)public void createOrder(Integer userId, Integer productId) {log.info("当前 XID: {}", RootContext.getXID());//1、减库存productFeigne.reduceStock(productId, 1);//2、减余额accountFeign.reduceBalance(userId, product.getPrice());//3、下订单Orders order = new Orders();ordersMapper.insertSelective(order);}

相关文章:

  • Electron基本介绍
  • Oracle数据表ID自增操作
  • 【附代码】NumPy加速库NumExpr(大数据)
  • 微信小程序上传代码教程
  • C#,十进制展开数(Decimal Expansion Number)的算法与源代码
  • linux查看当前连接的IP
  • 新版MQL语言程序设计:键盘快捷键交易的设计与实现
  • 【大厂AI课学习笔记】1.5 AI技术领域(1)计算机视觉
  • 【安卓操作系统——讲解】
  • ubuntu22.04安装部署03: 设置root密码
  • 【数据分析】Excel中的常用函数公式总结
  • react+antd+CheckableTag实现Tag标签单选或多选功能
  • 《动手学深度学习(PyTorch版)》笔记7.2
  • React 错误边界组件 react-error-boundary 源码解析
  • 实战案例:将已有的 MySQL8.0 单机架构变成主从复制架构
  • [LeetCode] Wiggle Sort
  • ES6简单总结(搭配简单的讲解和小案例)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • LeetCode29.两数相除 JavaScript
  • Lsb图片隐写
  • NSTimer学习笔记
  • Promise面试题2实现异步串行执行
  • SegmentFault 2015 Top Rank
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Twitter赢在开放,三年创造奇迹
  • windows下如何用phpstorm同步测试服务器
  • 构建二叉树进行数值数组的去重及优化
  • 基于axios的vue插件,让http请求更简单
  • 实现菜单下拉伸展折叠效果demo
  • 硬币翻转问题,区间操作
  • 原生 js 实现移动端 Touch 滑动反弹
  • # 数据结构
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $.each()与$(selector).each()
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (27)4.8 习题课
  • (AngularJS)Angular 控制器之间通信初探
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET 4.0中的泛型协变和反变
  • .NET Core 项目指定SDK版本
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET中两种OCR方式对比
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [100天算法】-二叉树剪枝(day 48)
  • [Angular] 笔记 20:NgContent
  • [Angular] 笔记 21:@ViewChild
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [C++]C++类基本语法
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析
  • [hive]中的字段的数据类型有哪些
  • [IE编程] IE 是如何决定Accept-Language 属性的