微服务集成seata分布式事务 at模式快速验证_微服务整合seata
微服务集成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)
- ✅ 配置简单,易于集成
快速验证建议步骤:
- 引入 Seata 客户端依赖(如
seata-spring-boot-starter
) - 配置 TC(事务协调器)地址(Seata Server)
- 在入口方法上添加
@GlobalTransactional
注解 - 在各个微服务中配置数据源代理以支持分支事务
- 编写测试用例模拟分布式写操作并观察事务一致性
示例代码片段:
@GlobalTransactionalpublic 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=truespring.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=UTC db.user=root db.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.xml file: path: ${log.home:${user.home}/logs/seata} extend: logstash-appender: destination: 127.0.0.1:4560 kafka-appender: bootstrap-servers: 127.0.0.1:9092 topic: logback_to_logstashconsole: user: username: seata password: seataseata: config: # support: nacos, consul, apollo, zk, etcd3 type: file registry: # support: nacos, eureka, redis, zk, consul, etcd3, sofa type: nacos nacos: application: seata-server server-addr: 127.0.0.1:8848 group: DEFAULT_GROUP namespace: cluster: default context-path: ##1.The following configuration is for the open source version of Nacos username: password: store: # support: file 、 db 、 redis 、 raft mode: db db: datasource: druid db-type: mysql driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/my_seata?rewriteBatchedStatements=true user: root password: 123456 min-conn: 10 max-conn: 100 global-table: global_table branch-table: branch_table lock-table: lock_table distributed-lock-table: distributed_lock query-limit: 1000 max-wait: 5000 # server: # service-port: 8091 #If not configured, the default is \'${server.port} + 1000\' security: secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017 tokenValidityInMilliseconds: 1800000 ignore: 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的代码库
** 按顺序安装依赖 ** -
- my-dependencies 安装依赖
- my-dependencies 安装依赖
-
- my-starter 安装依赖
- my-starter 安装依赖
-
my-component-parent 安装依赖
-
my-boot-api 安装依赖
-
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
- 订单服务api 接口
-
浏览器请求结果:
-
数据库情况:
用户表 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模式全局事务测试结束