首页 > 其他分享 >seata学习-简单demo入门

seata学习-简单demo入门

时间:2023-08-14 22:24:34浏览次数:36  
标签:purchase return seata demo com id 入门

概述

学习一个框架,我喜欢从demo中了解该框架所能达到的效果再进行深入地学习。本篇文章将会介绍 seata 的一个入门使用 demo ,作为使用 seata 的入门学习文章。

使用案例

首先到github 中下载一个 RM 的运行服务,本例中使用的是 :

https://github.com/seata/seata/releases/download/v1.2.0/seata-server-1.2.0.zip

解压后在 /bin 路径下启动 bat 文件

接着自然就是demo 资源的下载了 :

https://github.com/seata/seata-samples

我们这里是使用的 MyBatis 和 Spring boot 和 seata 的整个案例,所涉及的 SQL 语句在 demo 路径下的 sql 文件夹下 :

1297993-20200515143746918-279617761.png

可以看到 springboot-mybatis 共有5个子项目,我们本地执行完sql ,记得修改每个子项目中的 application.yml 文件中关于数据库的配置 ,例如 :

server:
  port: 8082
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/db_order?useSSL=false&serverTimezone=UTC
    username: root
    password: 12345678
seata:
    ....
    ....

修改完启动,其中sbm-business-service 有个Controller 提供接口供我们测试 :

@RequestMapping("/api/business")
@RestController
public class BusinessController {

    @Autowired
    private BusinessService businessService;

    /**
     * 购买下单,模拟全局事务提交
     *
     * @return
     */
    @RequestMapping("/purchase/commit")
    public Boolean purchaseCommit(HttpServletRequest request) {
        businessService.purchase("1001", "2001", 1);
        return true;
    }

    /**
     * 购买下单,模拟全局事务回滚
     *
     * @return
     */
    @RequestMapping("/purchase/rollback")
    public Boolean purchaseRollback() {
        try {
            businessService.purchase("1002", "2001", 1);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }
}

可以看到这是一个模拟购物,订单和用户余额还有货物的例子,我们可以看一下数据库中的金额, 逻辑: 用户扣钱-> 库存-1 -> 订单库插入一条数据
这几个操作是不同事务,执行成功的话应该会同时一起执行,失败的话会一起回滚。
postman 调用 : localhost:8084/api/business/purchase/commit ,我们看一下执行成功后的结果 :
db_account.account_tbl 表的数据

id	user_id	money
1	1001	9995
2	1002	10000

db_storage.storage_tbl 中的数据

id	commodity_code	count
1	2001	999

db_order.order_tbl 表中的数据

id	user_id	commodity_code	count	money
1	1001	2001	1	5

ok,事务执行是成功的。

总结

该篇只是简单地介绍 seata 框架demo 等简单使用,方便大家入门,后续将继续深入 seata 的学习

参考资料

标签:purchase,return,seata,demo,com,id,入门
From: https://www.cnblogs.com/Benjious/p/17629929.html

相关文章

  • WS281xUKit评估学习板入门指南
    WS281xUKit评估学习板入门指南第一部分、序由于作者水平有限,文档和视频中难免有出错和讲得不好的地方,欢迎各位读者和观众善意地提出意见和建议,谢谢!第二部分、硬件概述WS2812B简介WS2812B幻彩灯珠是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯......
  • Web自动化_分布式测试Grid入门
    要在多台计算机上并⾏运⾏测试吗?那么,Grid正是为你准备的。分布式测试Grid环境:1.需要JDK支持,最新的版本需要11版本,老版本的1.8seleniumserverjar包下载地址:https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.5.0单机模式:启动命令:java-jar包名<一定要用ta......
  • Mybatis配置文件的空白模板和联系demo所用到的依赖
    核心配置文件模板<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><envir......
  • Kafka从入门到精通零基础进阶学习路线?
    Kafka从入门到精通零基础进阶学习路线?1.学习基础概念和架构:-了解Kafka的基础概念,如生产者、消费者、主题、分区等。-理解Kafka的架构,包括Kafkabroker、Zookeeper、消费者群组等。2.安装和配置Kafka:-下载和安装Kafka。-配置Kafkabroker和Zookeeper。3.发送......
  • Java入门学习——二进制、八进制、十六进制
    一、十进制转二进制的算法十进制数转二进制数:除二取余法。  二、十进制转十进制的算法三、二进制转十进制的算法    四、八进制、十六进制介绍为了便于观察和表示二进制,推出八进制和十六进制。每3位二进制作为一个单元,最小数是0(000),最大数是7(111),共8个数字,这就是......
  • Pomelo官方demo ChatofPomelo简析之一——用户登录
    Pomelo官方demoChatofPomelo简析之一——用户登录 官方给的tutorial真是简单明了,简的刚开始学pomelo,压根就不知道代码写在哪。所以还是自己研究研究。首先看服务器端,处理逻辑的主要在game-server/app/servers下。有chat、connector和gate三种类型的服务器。connector:frontend前......
  • 深度学习入门
    1.背景从去年底以来,AIGC炙手可热,多个业界大佬都认为AIGC会给整个产业带来一场革命,甚至所有的软件都会用AI重写。从历史上来看,人机交互方式的变革往往会将操作系统带入下一个世代,著名的例子如从命令行界面的DOS到键鼠图形界面的Windows,以及带来触控界面的iPhone,领创者都成......
  • Crunch从入门到精髓
    Crunch在肾透测试和各种暴力测试中,我们需要各种各样的密码字典。github上面的字典五花八门,但是没有一款适合自己。那么,如何制作自己的字典文件呢?Crunch是C语言开发的一种工具,可以创建自定义可修改的单词列表。在本文中,我们将详细讲解Crunch的使用。安装Crunch默认安装在KaliLinux......
  • mitmproxy从入门到放弃
    mitmproxy是一款常用的抓包工具。和其他抓包工具相比,不仅可以抓包还可以对包进行2次过滤并且伪装请求与python进行交互,相比fiddler和burp更为灵活。本文让我们一起来学习他的使用吧。mitmproxy工作原理特性拦截HTTP和HTTPS请求和响应并即时修改它们;保存完整的HTTP对话以供以......
  • Java入门学习——其他数据形式的存储原理
    一、字符(文本)在计算机中是如何存储的呢?ASCII编码表:即美国信息交换标准编码,规定现代英语、数字字符、和其他西欧字符对应的数字编码。为了验证字符是通过ASCII编码表编号的二进制形式进行存储的,我们在IDEA里新建一个Module(day02-basic-app),然后在src下面新建package(it.com.variab......