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

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: true
  application-id: your_application_id
  tx-service-group: default_tx_group
  enable-auto-data-source-proxy: true
  data-source-proxy-mode: AT
  service:
    vgroup-mapping:
      default_tx_group: default
  registry:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace:
      username: nacos
      password: nacos
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      data-id: seataServer.properties
      namespace:
      username: nacos
      password: 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);

    }

http://www.kler.cn/a/229334.html

相关文章:

  • 【零基础入门unity游戏开发——unity3D篇】地形Terrain的使用介绍
  • [手机Linux] ubuntu 错误解决
  • Boost Asio TCP异步服务端和客户端
  • 【Linux】操作系统与进程概念
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>优美的排列
  • 【ArcGIS初学】产生随机点计算混淆矩阵
  • Python OpenCV实现图片像素区域缩放
  • 2.4-学成在线内容管理之项目实战
  • MES生产执行管理
  • 几个MySQL系统调优工具
  • 代理模式
  • springboot 整合 PowerJob实现定时任务调度
  • FY-SA-20237·8-AI‘sIQ
  • 安卓动态链接库文件体积优化探索实践
  • PHP客服系统-vue客服聊天系统
  • 【0255】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(一)
  • AIGC技术讲解以及应用的落地
  • “极简壁纸“爬虫JS逆向·实战
  • 【Spring Boot 3】【JPA】嵌入式对象
  • 回归预测 | Matlab基于POA-LSSVM鹈鹕算法算法优化最小二乘支持向量机的数据多输入单输出回归预测
  • 快速掌握Vue.js框架:从入门到实战
  • K8S之标签的介绍和使用
  • CentOS 8 安装配置 Hadoop3.3.6 伪分布式安装方式(适用于开发和调试)
  • 记一次面试题
  • 09_树莓派_树莓派外设板_GPIO_按键的中断与消抖
  • C#,奥西里斯数(Osiris Number)的算法与源代码