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

微服务集成seata分布式事务 at模式快速验证

微服务集成Seata分布式事务

    • 本次demo代码地址
    • 业务场景:
      • 一般用于以下场景:
      • 使用 AT 模式的优势(适用于快速验证):
      • 快速验证建议步骤:
      • 注意事项:
    • 工具环境
    • 微服务版本选择
    • Nacos 环境搭建与启动
      • nacos 下载
      • nacos 配置文件
      • nacos 数据库文件
      • 启动nacos
    • Seata 环境搭建与启动
      • seata 下载
      • seata 配置文件
      • 添加数据库驱动
      • seata数据库文件
      • 启动seata
    • 启动项目测试分布式事务
      • 测试用例如下:
    • ** 订单服务(order-boot) -> 扣除库存(storage-boot) -> 扣除账户金额(account-boot) **
      • 进入git 拉取代码
      • 导入idea
      • 导入所需数据库(建立3个数据库)
      • 启动项目
      • 测试seata
      • 情况1:(正常情况)数据库ACID 一致
      • 情况2:(异常情况):模拟异常,停掉account服务-数据库ACID 一致
      • 情况3:(异常情况): 模拟account 报错,调整代码,3个服务正常运行

本次demo代码地址

https://gitee.com/xionggd/my-cloud

业务场景:

多个数据库、多个微服务
多个微服务、单个数据库
... 这些都会涉及到分布式事务的处理

微服务集成 Seata 的 AT 模式(Auto Transaction Mode)主要用于分布式系统中需要跨多个服务/数据库保证事务一致性的场景。AT 模式是一种对业务代码无侵入的分布式事务解决方案,适合快速接入和验证。

一般用于以下场景:

  • 订单、支付、库存等业务模块分离的电商系统

    • 示例:下单时需同时操作订单服务、库存服务、用户账户服务,要求这些操作要么全部成功,要么全部失败。
  • 金融类系统中的多账户转账

    • 示例:从一个账户扣款,同时向另一个账户加款,两个操作分布在不同的微服务中。
  • 物流系统中状态更新与费用计算解耦

    • 示例:物流状态变更触发计费服务,两个服务之间需要事务一致性。
  • 涉及多个数据库写操作的业务流程

    • 示例:用户注册后触发用户中心、积分系统、消息通知等多个服务的数据写入。

使用 AT 模式的优势(适用于快速验证):

  • ✅ 对业务逻辑无侵入,只需添加注解即可开启全局事务
  • ✅ 支持自动回滚和提交
  • ✅ 支持主流数据库(如 MySQL、Oracle、PostgreSQL)
  • ✅ 配置简单,易于集成

快速验证建议步骤:

  1. 引入 Seata 客户端依赖(如 seata-spring-boot-starter
  2. 配置 TC(事务协调器)地址(Seata Server)
  3. 在入口方法上添加 @GlobalTransactional 注解
  4. 在各个微服务中配置数据源代理以支持分支事务
  5. 编写测试用例模拟分布式写操作并观察事务一致性

示例代码片段:

@GlobalTransactional
public void placeOrder(Order order) {orderService.create(order);inventoryService.reduceStock(order.getProductId(), order.getCount());accountService.deductBalance(order.getUserId(), order.getTotalPrice());
}

注意事项:

  • 数据库表需包含 undo_log 表用于事务回滚
  • 不适合超大规模并发或高吞吐场景(可考虑 TCC 或 Saga 模式)

工具环境

【工具版本】JDK17+mysql8.xspring-boot 3.3.0spring-cloud 2023.0.5spring-cloud-alibaba 2023.0.3.3mybatis-flex 1.10.9cloud组件:sentinel 2023.0.3.3 熔断器loadbalancer 负载均衡器openfeign 微服务调用客户端
【中间件】seata 分布式事务中间件nacos 注册中心和配置中心

微服务版本选择

Spring Cloud Alibaba 版本选择
在这里插入图片描述

Nacos 环境搭建与启动

nacos 下载

https://nacos.io/download/nacos-server/?spm=5238cd80.2ef5001f.0.0.3f613b7c0cg6rw
在这里插入图片描述

nacos 配置文件

  • 这里使用mysql作为nacos的持久化工具,修改配置文件如下
    • nacos解压的目录: nacos-3.0.1\conf\application.properties

application.properties:

# 位于25 - 33 行 启用mysql配置
#*************** Datasource Related Configurations ***************#
### nacos.plugin.datasource.log.enabled=true
spring.sql.init.platform=mysql
### Count of DB:db.num=1
### Connect URL of DB:db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user=rootdb.password=123456

nacos 数据库文件

已经配置好的项目 yml

-- 如果存在就删除,这里不要删,自行处理
-- DROP DATABASE IF EXISTS `nacos`;-- 创建nacos数据库
CREATE DATABASE  `nacos` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 使用这个库
USE `nacos`;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for config_info
-- ----------------------------
DROP TABLE IF EXISTS `config_info`;
CREATE TABLE `config_info`  (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'data_id',`group_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'group_id',`content` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'content',`md5` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',`src_user` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL COMMENT 'source user',`src_ip` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'source ip',`app_name` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'app_name',`tenant_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '' COMMENT '租户字段',`c_desc` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'configuration description',`c_use` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'configuration usage',`effect` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT '配置生效的描述',`type` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT '配置的类型',`c_schema` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL COMMENT '配置的模式',`encrypted_data_key` varchar(1024) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '' COMMENT '密钥',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = 'config_info' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of config_info
-- ----------------------------
INSERT INTO `config_info` VALUES (1, 'application-dev.yaml', 'DEFAULT_GROUP', '# feign 配置\nfeign:\n  sentinel:\n    enabled: true\n  okhttp:\n    enabled: true\n  httpclient:\n    enabled: false\n  client:\n    config:\n      default:\n        connectTimeout: 10000\n        readTimeout: 10000\n  compression:\n    request:\n      enabled: true\n      min-request-size: 8192\n    response:\n      enabled: true\n\n# seata 分布式事务配置\nseata:\n  enabled: true\n  registry:\n    type: nacos\n    nacos:\n      server-addr: 127.0.0.1:8848\n      group: DEFAULT_GROUP\n  service:\n    vgroup-mapping:\n      default_tx_group: default ', '1ef6e82a7c619b4e4271110410fbcaf6', '2025-06-06 17:12:23', '2025-06-11 13:56:14', 'nacos', '10.50.101.31', '', 'public', '公共配置', NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` VALUES (4, 'application-dev-storage-boot.yaml', 'DEFAULT_GROUP', 'server:\n  port: 9222\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n\n# seata x微服务配置\nseata:\n  application-id: storage-boot\n  tx-service-group: default_tx_group', '2223fd4f6282ac3162efa506059f8091', '2025-06-09 10:54:46', '2025-06-11 14:05:21', 'nacos', '10.50.101.31', '', 'public', 'storage服务配置', NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` VALUES (5, 'application-dev-order-boot.yaml', 'DEFAULT_GROUP', 'server:\n  port: 9223\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_order?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n\n# seata x微服务配置\nseata:\n  application-id: order-boot\n  tx-service-group: default_tx_group', '133403d1c3a807cb7ca425b062b52c1f', '2025-06-10 10:45:54', '2025-06-11 13:56:46', 'nacos', '10.50.101.31', '', 'public', 'order服务配置', NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` VALUES (6, 'application-dev-account-boot.yaml', 'DEFAULT_GROUP', 'server:\n  port: 9300\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_account?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n\n\n# seata x微服务配置\nseata:\n  application-id: account-boot\n  tx-service-group: default_tx_group', '7df132049d1212029c8ad3ce816d24db', '2025-06-10 10:50:11', '2025-06-11 14:05:41', 'nacos', '10.50.101.31', '', 'public', 'account服务配置', NULL, NULL, 'yaml', NULL, '');-- ----------------------------
-- Table structure for config_info_gray
-- ----------------------------
DROP TABLE IF EXISTS `config_info_gray`;
CREATE TABLE `config_info_gray`  (`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'data_id',`group_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'group_id',`content` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'content',`md5` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'md5',`src_user` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT 'src_user',`src_ip` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'src_ip',`gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',`gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',`app_name` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'app_name',`tenant_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT 'tenant_id',`gray_name` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'gray_name',`gray_rule` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'gray_rule',`encrypted_data_key` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_configinfogray_datagrouptenantgray`(`data_id`, `group_id`, `tenant_id`, `gray_name`) USING BTREE,INDEX `idx_dataid_gmt_modified`(`data_id`, `gmt_modified`) USING BTREE,INDEX `idx_gmt_modified`(`gmt_modified`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'config_info_gray' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of config_info_gray
-- ------------------------------ ----------------------------
-- Table structure for config_tags_relation
-- ----------------------------
DROP TABLE IF EXISTS `config_tags_relation`;
CREATE TABLE `config_tags_relation`  (`id` bigint NOT NULL COMMENT 'id',`tag_name` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'tag_name',`tag_type` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'tag_type',`data_id` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'data_id',`group_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'group_id',`tenant_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '' COMMENT 'tenant_id',`nid` bigint NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',PRIMARY KEY (`nid`) USING BTREE,UNIQUE INDEX `uk_configtagrelation_configidtag`(`id`, `tag_name`, `tag_type`) USING BTREE,INDEX `idx_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = 'config_tag_relation' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of config_tags_relation
-- ------------------------------ ----------------------------
-- Table structure for group_capacity
-- ----------------------------
DROP TABLE IF EXISTS `group_capacity`;
CREATE TABLE `group_capacity`  (`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',`group_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',`quota` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值',`usage` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量',`max_size` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',`max_aggr_count` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数,,0表示使用默认值',`max_aggr_size` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',`max_history_count` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_group_id`(`group_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = '集群、各Group容量信息表' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of group_capacity
-- ----------------------------
INSERT INTO `group_capacity` VALUES (1, '', 0, 4, 0, 0, 0, 0, '2025-06-06 09:12:22', '2025-06-11 08:20:31');-- ----------------------------
-- Table structure for his_config_info
-- ----------------------------
DROP TABLE IF EXISTS `his_config_info`;
CREATE TABLE `his_config_info`  (`id` bigint UNSIGNED NOT NULL COMMENT 'id',`nid` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',`data_id` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'data_id',`group_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'group_id',`app_name` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'app_name',`content` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'content',`md5` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',`src_user` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL COMMENT 'source user',`src_ip` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'source ip',`op_type` char(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'operation type',`tenant_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '' COMMENT '租户字段',`encrypted_data_key` varchar(1024) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '' COMMENT '密钥',`publish_type` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT 'formal' COMMENT 'publish type gray or formal',`gray_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'gray name',`ext_info` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL COMMENT 'ext info',PRIMARY KEY (`nid`) USING BTREE,INDEX `idx_gmt_create`(`gmt_create`) USING BTREE,INDEX `idx_gmt_modified`(`gmt_modified`) USING BTREE,INDEX `idx_did`(`data_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = '多租户改造' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of his_config_info
-- ----------------------------
INSERT INTO `his_config_info` VALUES (0, 1, 'application-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\r\n    data:\r\n        ', '4551d3c5b42639f2df276a5057df17d5', '2025-06-06 17:12:22', '2025-06-06 09:12:23', 'nacos', '10.50.101.31', 'I', 'public', '', 'formal', '', '{\"src_user\":\"nacos\",\"type\":\"yaml\",\"c_desc\":\"公共配置\"}');
INSERT INTO `his_config_info` VALUES (0, 2, 'application-storage-boot-dev.yaml', 'DEFAULT_GROUP', '', '# DataSource Config\r\nspring:\r\n  datasource:\r\n    url: jdbc:mysql://localhost:3306/storage\r\n    username: root\r\n    password: 123456', 'c4451f290ffb86f4500869b6da7a97c9', '2025-06-06 17:25:54', '2025-06-06 09:25:54', 'nacos', '10.50.101.31', 'I', 'public', '', 'formal', '', '{\"src_user\":\"nacos\",\"type\":\"yaml\",\"c_desc\":\"storage-boot配置\"}');
INSERT INTO `his_config_info` VALUES (2, 3, 'application-storage-boot-dev.yaml', 'DEFAULT_GROUP', '', '# DataSource Config\r\nspring:\r\n  datasource:\r\n    url: jdbc:mysql://localhost:3306/storage\r\n    username: root\r\n    password: 123456', 'c4451f290ffb86f4500869b6da7a97c9', '2025-06-06 17:33:29', '2025-06-06 09:33:30', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"storage-boot配置\"}');
INSERT INTO `his_config_info` VALUES (2, 4, 'application-storage-boot-dev.yaml', 'DEFAULT_GROUP', '', '# DataSource Config\nspring:\n  datasource:\n    url: jdbc:mysql://127.0.0.1:3306/my_storage\n    username: root\n    password: 123456', 'fbdfbd0db7dc001921c067109c180763', '2025-06-06 17:34:31', '2025-06-06 09:34:31', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"storage-boot配置\"}');
INSERT INTO `his_config_info` VALUES (2, 5, 'application-storage-boot-dev.yaml', 'DEFAULT_GROUP', '', '# DataSource Config\nspring:\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_storage\n    username: root\n    password: 123456', '66e1c993c7ed5567a1371b82a9223b45', '2025-06-06 17:35:47', '2025-06-06 09:35:48', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"storage-boot配置\"}');
INSERT INTO `his_config_info` VALUES (2, 6, 'application-storage-boot-dev.yaml', 'DEFAULT_GROUP', '', '# DataSource Config\nspring:\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456', 'e7059c7fa261b458b395c7cf7a835aa7', '2025-06-06 17:39:05', '2025-06-06 09:39:05', 'nacos', '10.50.101.31', 'D', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"storage-boot配置\"}');
INSERT INTO `his_config_info` VALUES (1, 7, 'application-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\r\n    data:\r\n        ', '4551d3c5b42639f2df276a5057df17d5', '2025-06-09 09:15:39', '2025-06-09 01:15:40', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"公共配置\"}');
INSERT INTO `his_config_info` VALUES (1, 8, 'application-dev.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9222', '88588bd670a9a12159b2d7ab7a77dec9', '2025-06-09 09:40:15', '2025-06-09 01:40:16', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"公共配置\"}');
INSERT INTO `his_config_info` VALUES (1, 9, 'application-dev.yaml', 'DEFAULT_GROUP', '', 'test:\n  a1: 哈哈哈', '89cbd73f0db3dcae1b18bc2b9491fc8d', '2025-06-09 09:57:50', '2025-06-09 01:57:50', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"公共配置\"}');
INSERT INTO `his_config_info` VALUES (1, 10, 'application-dev.yaml', 'DEFAULT_GROUP', '', 'test:\n  a1: 哈哈哈222', '80a88d1fe79afa30484018d0351cea0b', '2025-06-09 10:01:00', '2025-06-09 02:01:01', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"公共配置\"}');
INSERT INTO `his_config_info` VALUES (0, 11, 'application-dev-storage.yaml', 'DEFAULT_GROUP', '', 'spring:\r\n  # mysql数据源\r\n  datasource:\r\n    driver-class-name: com.mysql.cj.jdbc.Driver\r\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\r\n    username: root\r\n    password: 123456\r\n', '646e5cf7302e84dd2c393da5700f11be', '2025-06-09 10:51:36', '2025-06-09 02:51:37', 'nacos', '10.50.101.31', 'I', 'public', '', 'formal', '', '{\"src_user\":\"nacos\",\"type\":\"yaml\",\"c_desc\":\"storage服务的配置\"}');
INSERT INTO `his_config_info` VALUES (0, 12, 'application-dev-storage-boot.yaml', 'DEFAULT_GROUP', '', 'spring:\r\n  # mysql数据源\r\n  datasource:\r\n    driver-class-name: com.mysql.cj.jdbc.Driver\r\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\r\n    username: root\r\n    password: 123456\r\n', '646e5cf7302e84dd2c393da5700f11be', '2025-06-09 10:54:45', '2025-06-09 02:54:46', 'nacos', '10.50.101.31', 'I', 'public', '', 'formal', '', '{\"src_user\":\"nacos\",\"type\":\"yaml\",\"c_desc\":\"storage服务配置\"}');
INSERT INTO `his_config_info` VALUES (3, 13, 'application-dev-storage.yaml', 'DEFAULT_GROUP', '', 'spring:\r\n  # mysql数据源\r\n  datasource:\r\n    driver-class-name: com.mysql.cj.jdbc.Driver\r\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\r\n    username: root\r\n    password: 123456\r\n', '646e5cf7302e84dd2c393da5700f11be', '2025-06-09 10:54:48', '2025-06-09 02:54:49', 'nacos', '10.50.101.31', 'D', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"storage服务的配置\"}');
INSERT INTO `his_config_info` VALUES (4, 14, 'application-dev-storage-boot.yaml', 'DEFAULT_GROUP', '', 'spring:\r\n  # mysql数据源\r\n  datasource:\r\n    driver-class-name: com.mysql.cj.jdbc.Driver\r\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\r\n    username: root\r\n    password: 123456\r\n', '646e5cf7302e84dd2c393da5700f11be', '2025-06-09 14:46:04', '2025-06-09 06:46:04', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"storage服务配置\"}');
INSERT INTO `his_config_info` VALUES (0, 15, 'application-dev-order-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9222\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', 'c192a70969811ca8d3118434205a18d3', '2025-06-10 10:45:54', '2025-06-10 02:45:54', 'nacos', '10.50.101.31', 'I', 'public', '', 'formal', '', '{\"src_user\":\"nacos\",\"type\":\"yaml\",\"c_desc\":\"storage服务配置\"}');
INSERT INTO `his_config_info` VALUES (5, 16, 'application-dev-order-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9222\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', 'c192a70969811ca8d3118434205a18d3', '2025-06-10 10:46:14', '2025-06-10 02:46:15', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"storage服务配置\"}');
INSERT INTO `his_config_info` VALUES (0, 17, 'application-dev-account-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9223\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_order?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', '1c4458bf301c0b2bd3b3bf2c4c779a3d', '2025-06-10 10:50:10', '2025-06-10 02:50:11', 'nacos', '10.50.101.31', 'I', 'public', '', 'formal', '', '{\"src_user\":\"nacos\",\"type\":\"yaml\",\"c_desc\":\"order服务配置\"}');
INSERT INTO `his_config_info` VALUES (6, 18, 'application-dev-account-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9223\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_order?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', '1c4458bf301c0b2bd3b3bf2c4c779a3d', '2025-06-10 10:50:43', '2025-06-10 02:50:44', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"order服务配置\"}');
INSERT INTO `his_config_info` VALUES (0, 19, 'application-dev-bussiness-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9300\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_account?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', '1fc16b65354d566f269373183474f819', '2025-06-10 10:51:10', '2025-06-10 02:51:11', 'nacos', '10.50.101.31', 'I', 'public', '', 'formal', '', '{\"src_user\":\"nacos\",\"type\":\"yaml\",\"c_desc\":\"account服务配置\"}');
INSERT INTO `his_config_info` VALUES (7, 20, 'application-dev-bussiness-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9300\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_account?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', '1fc16b65354d566f269373183474f819', '2025-06-10 10:51:57', '2025-06-10 02:51:57', 'nacos', '10.50.101.31', 'D', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"account服务配置\"}');
INSERT INTO `his_config_info` VALUES (0, 21, 'ry-application-dev.yml', 'DEFAULT_GROUP', '', 'data:', '7a8153f7dc0f57d2f3462710d97d00cb', '2025-06-11 10:25:13', '2025-06-11 02:25:13', 'nacos', '10.50.101.31', 'I', 'public', '', 'formal', '', '{\"src_user\":\"nacos\",\"type\":\"yaml\",\"c_desc\":\"ry-application-dev.yaml\"}');
INSERT INTO `his_config_info` VALUES (1, 22, 'application-dev.yaml', 'DEFAULT_GROUP', '', 'test:\n  a1: 123哈哈哈222233', 'ae404fb121ebc0e360be67b36939371a', '2025-06-11 10:26:14', '2025-06-11 02:26:15', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"公共配置\"}');
INSERT INTO `his_config_info` VALUES (1, 23, 'application-dev.yaml', 'DEFAULT_GROUP', '', '# feign 配置\nfeign:\n  sentinel:\n    enabled: true\n  okhttp:\n    enabled: true\n  httpclient:\n    enabled: false\n  client:\n    config:\n      default:\n        connectTimeout: 10000\n        readTimeout: 10000\n  compression:\n    request:\n      enabled: true\n      min-request-size: 8192\n    response:\n      enabled: true', '5edb8badfae167d9425b3853efe662c9', '2025-06-11 13:56:14', '2025-06-11 05:56:14', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"公共配置\"}');
INSERT INTO `his_config_info` VALUES (5, 24, 'application-dev-order-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9223\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_order?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', '1c4458bf301c0b2bd3b3bf2c4c779a3d', '2025-06-11 13:56:46', '2025-06-11 05:56:46', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"order服务配置\"}');
INSERT INTO `his_config_info` VALUES (4, 25, 'application-dev-storage-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9222\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_storage?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', 'c192a70969811ca8d3118434205a18d3', '2025-06-11 14:05:20', '2025-06-11 06:05:21', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"storage服务配置\"}');
INSERT INTO `his_config_info` VALUES (6, 26, 'application-dev-account-boot.yaml', 'DEFAULT_GROUP', '', 'server:\n  port: 9300\n\nspring:\n  # mysql数据源\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql://127.0.0.1:3306/my_account?characterEncoding=utf8&serverTimezone=GMT%2b8&autoReconnect=true&useUnicode=true&rewriteBatchedStatements=true\n    username: root\n    password: 123456\n', '1fc16b65354d566f269373183474f819', '2025-06-11 14:05:40', '2025-06-11 06:05:41', 'nacos', '10.50.101.31', 'U', 'public', '', 'formal', '', '{\"type\":\"yaml\",\"src_user\":\"nacos\",\"c_desc\":\"account服务配置\"}');-- ----------------------------
-- Table structure for permissions
-- ----------------------------
DROP TABLE IF EXISTS `permissions`;
CREATE TABLE `permissions`  (`role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'role',`resource` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'resource',`action` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'action',UNIQUE INDEX `uk_role_permission`(`role`, `resource`, `action`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of permissions
-- ------------------------------ ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles`  (`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'username',`role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'role',UNIQUE INDEX `idx_user_role`(`username`, `role`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of roles
-- ----------------------------
INSERT INTO `roles` VALUES ('nacos', 'ROLE_ADMIN');-- ----------------------------
-- Table structure for tenant_capacity
-- ----------------------------
DROP TABLE IF EXISTS `tenant_capacity`;
CREATE TABLE `tenant_capacity`  (`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',`tenant_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID',`quota` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值',`usage` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量',`max_size` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',`max_aggr_count` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数',`max_aggr_size` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',`max_history_count` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = '租户容量信息表' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of tenant_capacity
-- ----------------------------
INSERT INTO `tenant_capacity` VALUES (1, 'public', 0, 4, 0, 0, 0, 0, '2025-06-06 09:12:22', '2025-06-11 08:20:31');-- ----------------------------
-- Table structure for tenant_info
-- ----------------------------
DROP TABLE IF EXISTS `tenant_info`;
CREATE TABLE `tenant_info`  (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',`kp` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL COMMENT 'kp',`tenant_id` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '' COMMENT 'tenant_id',`tenant_name` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '' COMMENT 'tenant_name',`tenant_desc` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'tenant_desc',`create_source` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT 'create_source',`gmt_create` bigint NOT NULL COMMENT '创建时间',`gmt_modified` bigint NOT NULL COMMENT '修改时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp`, `tenant_id`) USING BTREE,INDEX `idx_tenant_id`(`tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = 'tenant_info' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of tenant_info
-- ------------------------------ ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'username',`password` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'password',`enabled` tinyint(1) NOT NULL COMMENT 'enabled',PRIMARY KEY (`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('nacos', '$2a$10$mULEQk1QStEjDfKLjMrvjOVSHXF.ZptfXtTKdmR71Ce7VAFkxijI6', 1);SET FOREIGN_KEY_CHECKS = 1;

启动nacos

进入目录启动
注意需要jdk17+

  • 设置环境变量
    *** 这里“C:\Users\jdks\graalvm-jdk-21.0.7”要替换你jdk17+所在目录
    *** 这里“C:\Users\jdks\graalvm-jdk-21.0.7”要替换你jdk17+所在目录
    *** 这里“C:\Users\jdks\graalvm-jdk-21.0.7”要替换你jdk17+所在目录
set JAVA_HOME=C:\Users\jdks\graalvm-jdk-21.0.7
  • 单机启动
startup.cmd -m standalone
  • 12345678901234567890123456789012 编译后的 base64:
    启动需要数据这个,控制台输入
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=
  • 访问nacos
    http://127.0.0.1:8080/#/login
    在这里插入图片描述
用户名:nacos
密码:nacos

在这里插入图片描述

Seata 环境搭建与启动

seata 下载

  • ** 下载**
    https://seata.apache.org/zh-cn/download/seata-server
    在这里插入图片描述

  • ** 官网**
    这里我们选择的版本是 seata 2.1:
    https://seata.apache.org/zh-cn/docs/v2.1/user/quickstart/
    在这里插入图片描述

  • ** 解压 **
    apache-seata-2.1.0-incubating-bin
    在这里插入图片描述

seata 配置文件

修改配置文件:

  • application.yml
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#server:port: 7091spring:application:name: seata-serverlogging:config: classpath:logback-spring.xmlfile:path: ${log.home:${user.home}/logs/seata}extend:logstash-appender:destination: 127.0.0.1:4560kafka-appender:bootstrap-servers: 127.0.0.1:9092topic: logback_to_logstashconsole:user:username: seatapassword: seata
seata:config:# support: nacos, consul, apollo, zk, etcd3type: fileregistry:# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: DEFAULT_GROUPnamespace:cluster: defaultcontext-path:##1.The following configuration is for the open source version of Nacosusername:password:store:# support: file 、 db 、 redis 、 raftmode: dbdb:datasource: druiddb-type: mysqldriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/my_seata?rewriteBatchedStatements=trueuser: rootpassword: 123456min-conn: 10max-conn: 100global-table: global_tablebranch-table: branch_tablelock-table: lock_tabledistributed-lock-table: distributed_lockquery-limit: 1000max-wait: 5000#  server:#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'security:secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017tokenValidityInMilliseconds: 1800000ignore:urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/version.json,/health,/error

添加数据库驱动

  • 驱动下载地址:mysql-connector-java-8.0.28.jar
    https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar
    在这里插入图片描述
  • 下载完放入lib/jdbc路径
    *\apache-seata-2.1.0-incubating-bin\lib\jdbc
    在这里插入图片描述

seata数据库文件

  • my_seata.sql
-- 如果存在就删除,这里不要删,自行处理
-- DROP DATABASE IF EXISTS `my_seata`;-- 创建数据库
CREATE DATABASE  `my_seata` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 使用这个库
USE `my_seata`;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for branch_table
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table`  (`branch_id` bigint NOT NULL,`xid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`transaction_id` bigint NULL DEFAULT NULL,`resource_group_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`resource_id` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`branch_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`status` tinyint NULL DEFAULT NULL,`client_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`application_data` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`gmt_create` datetime(6) NULL DEFAULT NULL,`gmt_modified` datetime(6) NULL DEFAULT NULL,PRIMARY KEY (`branch_id`) USING BTREE,INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of branch_table
-- ------------------------------ ----------------------------
-- Table structure for distributed_lock
-- ----------------------------
DROP TABLE IF EXISTS `distributed_lock`;
CREATE TABLE `distributed_lock`  (`lock_key` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`lock_value` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`expire` bigint NULL DEFAULT NULL,PRIMARY KEY (`lock_key`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of distributed_lock
-- ----------------------------
INSERT INTO `distributed_lock` VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` VALUES ('TxTimeoutCheck', ' ', 0);
INSERT INTO `distributed_lock` VALUES ('UndologDelete', ' ', 0);-- ----------------------------
-- Table structure for global_table
-- ----------------------------
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table`  (`xid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`transaction_id` bigint NULL DEFAULT NULL,`status` tinyint NOT NULL,`application_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`transaction_service_group` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`transaction_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`timeout` int NULL DEFAULT NULL,`begin_time` bigint NULL DEFAULT NULL,`application_data` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`gmt_create` datetime NULL DEFAULT NULL,`gmt_modified` datetime NULL DEFAULT NULL,PRIMARY KEY (`xid`) USING BTREE,INDEX `idx_status_gmt_modified`(`status`, `gmt_modified`) USING BTREE,INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of global_table
-- ------------------------------ ----------------------------
-- Table structure for lock_table
-- ----------------------------
DROP TABLE IF EXISTS `lock_table`;
CREATE TABLE `lock_table`  (`row_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`xid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`transaction_id` bigint NULL DEFAULT NULL,`branch_id` bigint NOT NULL,`resource_id` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`table_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`pk` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`status` tinyint NOT NULL DEFAULT 0 COMMENT '0:locked ,1:rollbacking',`gmt_create` datetime NULL DEFAULT NULL,`gmt_modified` datetime NULL DEFAULT NULL,PRIMARY KEY (`row_key`) USING BTREE,INDEX `idx_status`(`status`) USING BTREE,INDEX `idx_branch_id`(`branch_id`) USING BTREE,INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of lock_table
-- ----------------------------SET FOREIGN_KEY_CHECKS = 1;

启动seata

  • 进入bin
    在这里插入图片描述
  • 输入cmd
    在这里插入图片描述
  • 输入启动命令, seata 也是使用的db数据库持久化
seata-server.bat -p 8091 -h 127.0.0.1 -m db
  • 进入seata控制台 在这里插入图片描述
用户名:seata
密码:seata
  • 登录
    在这里插入图片描述

启动项目测试分布式事务

测试用例如下:

** 订单服务(order-boot) -> 扣除库存(storage-boot) -> 扣除账户金额(account-boot) **

在这里插入图片描述

进入git 拉取代码

git clone https://gitee.com/xionggd/my-cloud.git

在这里插入图片描述

导入idea

  • idea 选择: file -> Open 你clone的代码库
    在这里插入图片描述
    ** 按顺序安装依赖 **
    1. my-dependencies 安装依赖
      在这里插入图片描述
    1. my-starter 安装依赖
      在这里插入图片描述
  1. my-component-parent 安装依赖
    在这里插入图片描述

  2. my-boot-api 安装依赖
    在这里插入图片描述

  3. my-boot-parent 编译项目
    在这里插入图片描述

导入所需数据库(建立3个数据库)

  • 这里模拟多个数据库,我本地 创建3个数据:分别是 用户库、订单库、仓储依次执行sql
  • my_account.sql 账户用户库
-- 如果存在就删除,这里不要删,自行处理
-- DROP DATABASE IF EXISTS `my_account`;-- 创建数据库
CREATE DATABASE  `my_account` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 使用这个库
USE `my_account`;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for account
-- ----------------------------
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account`  (`id` int NOT NULL AUTO_INCREMENT,`user_id` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,`money` int NULL DEFAULT 0,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of account
-- ----------------------------
INSERT INTO `account` VALUES (1, 'zhangsan', 196);-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log`  (`id` bigint NOT NULL AUTO_INCREMENT,`branch_id` bigint NOT NULL,`xid` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,`context` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of undo_log
-- ----------------------------SET FOREIGN_KEY_CHECKS = 1;
  • my_order.sql 订单库
-- 如果存在就删除,这里不要删,自行处理
-- DROP DATABASE IF EXISTS `my_order`;-- 创建数据库
CREATE DATABASE  `my_order` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 使用这个库
USE `my_order`;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for order
-- ----------------------------
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order`  (`id` int NOT NULL AUTO_INCREMENT,`user_id` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,`commodity_code` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,`count` int NULL DEFAULT 0,`money` int NULL DEFAULT 0,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of order
-- ----------------------------
INSERT INTO `order` VALUES (6, 'zhangsan', '1002', 1, 1);
INSERT INTO `order` VALUES (7, 'zhangsan', '1002', 1, 1);
INSERT INTO `order` VALUES (11, 'zhangsan', '1002', 1, 1);
INSERT INTO `order` VALUES (12, 'zhangsan', '1002', 1, 1);-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log`  (`id` bigint NOT NULL AUTO_INCREMENT,`branch_id` bigint NOT NULL,`xid` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,`context` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of undo_log
-- ----------------------------SET FOREIGN_KEY_CHECKS = 1;
  • my_storage.sql 仓储库
-- 如果存在就删除,这里不要删,自行处理
-- DROP DATABASE IF EXISTS `my_storage`;-- 创建数据库
CREATE DATABASE  `my_storage` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 使用这个库
USE `my_storage`;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for storage
-- ----------------------------
DROP TABLE IF EXISTS `storage`;
CREATE TABLE `storage`  (`id` int NOT NULL AUTO_INCREMENT,`commodity_code` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,`count` int NULL DEFAULT 0,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `commodity_code`(`commodity_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of storage
-- ----------------------------
INSERT INTO `storage` VALUES (1, '1002', 196);-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log`  (`id` bigint NOT NULL AUTO_INCREMENT,`branch_id` bigint NOT NULL,`xid` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,`context` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of undo_log
-- ----------------------------SET FOREIGN_KEY_CHECKS = 1;

启动项目

  • 启动 account-boot 服务(用户账户)
    在这里插入图片描述

  • 启动 order-boot 服务 (订单)
    在这里插入图片描述

  • 启动 storage-boot 服务 (仓储)
    在这里插入图片描述

启动后查看nacos

  • 服务启动情况
    在这里插入图片描述

  • nacos注册中心查看服务
    在这里插入图片描述

测试seata

  • 数据库目前情况:
    • account表数据
      在这里插入图片描述

    • order表数据
      在这里插入图片描述

    • storage表数据
      在这里插入图片描述

情况1:(正常情况)数据库ACID 一致

  • 请求采购单接口:

    • 订单服务api 接口
      在这里插入图片描述
    get 请求zhangsan 采购 1002 数量 1:
    http://localhost:9223/order/purchase?userId=zhangsan&commodityCode=1002&orderCount=1
    
  • 浏览器请求结果:
    在这里插入图片描述

  • 数据库情况:
    用户表 money - 1
    在这里插入图片描述
    order订单表创建了一个订单
    在这里插入图片描述
    仓库被采购了 1002 一件数量
    在这里插入图片描述

情况2:(异常情况):模拟异常,停掉account服务-数据库ACID 一致

在这里插入图片描述
在这里插入图片描述

  • 请求
    get 请求zhangsan 采购 1002 数量 1:
    http://localhost:9223/order/purchase?userId=zhangsan&commodityCode=1002&orderCount=1
    
  • 浏览器请求结果:
    在这里插入图片描述
    在这里插入图片描述
  • 数据库
    在这里插入图片描述

结果:全局事务生效
在这里插入图片描述

情况3:(异常情况): 模拟account 报错,调整代码,3个服务正常运行

  • 调整 account-boot 服务代码
    在这里插入图片描述

  • 启动account 服务
    在这里插入图片描述
    在这里插入图片描述

  • 请求

    get 请求zhangsan 采购 1002 数量 1:
    http://localhost:9223/order/purchase?userId=zhangsan&commodityCode=1002&orderCount=1
    
  • 浏览器请求结果:
    在这里插入图片描述

  • idea 日志
    在这里插入图片描述

  • 数据库情况
    在这里插入图片描述

  • 结果:全局事务生效

seata AT模式全局事务测试结束

相关文章:

  • 【Java工程师面试全攻略】Day8:高并发系统设计实战
  • R语言缓释制剂QBD解决方案之四
  • 2025pmx文件怎么打开blender和虚幻
  • Vosk API:开源离线语音识别的强大工具
  • 超简单部署离线语音合成TTS和语音识别
  • 【android bluetooth 框架分析 04】【bt-framework 层详解 5】【AbstractionLayer介绍】
  • 机器学习 [白板推导](五)[支持向量机]
  • 落水人员目标检测数据集(猫脸码客第253期)
  • 高保真组件库:获取验证码
  • python格式化字符串的几种方式
  • Spring上下文模块设计
  • 图像处理 | 如何动态调整CLAHE算法中的ClipLimit参数
  • 回归-嵌入式与c概念
  • 2025年渗透测试面试题总结-长亭科技[校招]安全服务工程师(题目+回答)
  • 使用 MkDocs 构建并部署项目文档到 GitHub Pages
  • 小程序【页面离开、页面卸载】对比区分
  • (十二)深度学习计算性能:硬件架构、算法效率与理论极限分析
  • 【苍穹外卖项目】Day01
  • ZeroTier+CCproxy+Proxifier实现内网穿透和流量转发
  • uniapp 腾讯云 COS 文件管理进阶(文件夹分类与批量操作)
  • 做设计网站的工作怎么样/搜seo
  • ui素材网站/免费的个人网页
  • 华为云免费服务器/广州seo关键词优化是什么
  • 开封建站公司/域名查询 站长查询
  • 4435建站/web网站设计
  • 做网站优化费用/站长工具seo查询5g5g