# order-data-generator **Repository Path**: xhyym/order-data-generator ## Basic Information - **Project Name**: order-data-generator - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-11 - **Last Updated**: 2025-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多租户订单数据生成器 多租户订单数据生成器是基于 Spring Boot 2 + MyBatis-Plus + Thymeleaf 构建的测试数据生成工具,用于模拟多租户环境下的订单数据,支持生成大量结构化订单数据,可用于测试 RocketMQ 同步订单数据方案等场景。 ## 项目介绍 该工具聚焦多租户系统测试数据生成需求,核心能力包括: - 按年月批量生成订单数据,支持自由多选年月 - 区分大/小租户(默认大租户占比30%,可自定义) - 自定义租户数量与每月数据量(默认每月1000万条,支持3个月共3000万条数据) - 实时日志展示生成进度,基于Redis存储日志与生成状态 - 防重复提交机制,避免并发生成导致的数据异常 ## 运行效果 ## 技术栈 | 技术框架 | 版本 | 用途说明 | |-----------------|-------------|------------------------------| | Spring Boot | 2.x | 项目基础框架,快速构建应用 | | MyBatis-Plus | 3.x | 数据访问框架,简化CRUD操作 | | Thymeleaf | 3.x | 前端模板引擎,渲染页面 | | MySQL | 5.7 | 存储订单与租户数据 | | Redis | 5.x+ | 存储日志与生成状态,支持轮询 | | Bootstrap | 5.1.3 | 前端UI框架,实现响应式页面 | | jQuery | 3.6.0 | 处理前端交互逻辑 | ## 环境准备 ### 1. 基础环境依赖 - JDK 1.8 及以上 - Maven 3.6 及以上 - MySQL 5.7(需提前创建数据库) - Redis 5.x 及以上(确保服务正常运行) ### 2. 数据库初始化 执行以下SQL创建订单表和租户表(替换`your_database`为实际数据库名): ```sql -- 订单表(核心业务表) CREATE TABLE `t_order` ( `id` bigint(20) NOT NULL COMMENT '订单ID (雪花数字ID)', `tenant_id` bigint(20) NOT NULL COMMENT '租户ID (雪花数字ID)', `amount` decimal(22,8) NOT NULL COMMENT '订单金额', `order_date` datetime NOT NULL COMMENT '订单日期', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `status` varchar(50) NOT NULL COMMENT '订单状态(草稿/待审核/已审核等)', `order_no` varchar(50) NOT NULL COMMENT '订单编号', `customer_id` bigint(20) DEFAULT NULL COMMENT '客户ID', `product_quantity` int(11) DEFAULT NULL COMMENT '产品数量', `payment_method` varchar(50) DEFAULT NULL COMMENT '支付方式', `remark` varchar(255) DEFAULT NULL COMMENT '备注信息', `deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除标识(0-未删,1-已删)', PRIMARY KEY (`id`), KEY `idx_tenant_id` (`tenant_id`), KEY `idx_order_date` (`order_date`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表'; -- 租户表(多租户标识表) CREATE TABLE `t_tenant` ( `id` bigint(20) NOT NULL COMMENT '租户ID (雪花数字ID)', `name` varchar(100) NOT NULL COMMENT '租户名称', `type` varchar(20) NOT NULL COMMENT '租户类型(BIG-大租户,SMALL-小租户)', `data_weight` int(11) NOT NULL COMMENT '数据量权重(大租户权重更高)', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除标识(0-未删,1-已删)', PRIMARY KEY (`id`), KEY `idx_type` (`type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户表'; ``` ### 3. 配置文件修改 修改 `src/main/resources/application.yml` 中的数据库和Redis连接信息: ```yaml spring: # 数据库配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://172.16.3.217:33060/your_database?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root password: mysql_KmMbeW # Redis配置 redis: host: 172.16.3.217 port: 6379 password: redis_2nMGYp database: 0 timeout: 3000ms # MyBatis-Plus配置 mybatis-plus: mapper-locations: classpath:mapper/**/*.xml type-aliases-package: com.zb.entity global-config: db-config: id-type: assign_id # 雪花ID生成策略 logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0 ``` ## 项目结构 ``` com.zb ├── config/ # 配置类(RedisConfig、MyBatisPlusConfig等) ├── controller/ # 控制层(生成接口、日志接口) │ └── DataGeneratorController.java # 核心控制类 ├── entity/ # 实体类 │ ├── Order.java # 订单实体 │ └── Tenant.java # 租户实体 ├── mapper/ # Mapper接口 │ ├── OrderMapper.java │ └── TenantMapper.java ├── service/ # 服务层 │ ├── DataGeneratorService.java # 数据生成核心服务 │ ├── LogService.java # 日志管理服务 │ └── impl/ # 服务实现类 ├── util/ # 工具类 │ ├── SnowflakeIdUtil.java # 雪花ID生成工具 │ └── DateUtil.java # 日期处理工具 ├── MultiTenantOrderGeneratorApplication.java # 启动类 └── resources/ ├── application.yml # 全局配置文件 ├── mapper/ # Mapper XML文件 └── templates/ # 前端页面 └── index.html # 主页面(配置+日志) ``` ## 功能使用 ### 1. 项目启动方式 - 方式1:直接运行 `MultiTenantOrderGeneratorApplication.java` 启动类 - 方式2:Maven命令启动:`mvn spring-boot:run` - 方式3:打包后运行:`java -jar multi-tenant-order-generator.jar` ### 2. 系统访问 启动后访问 `http://localhost:8080`,页面分为左右两部分: #### 左侧:生成配置表单 | 配置项 | 说明 | 默认值 | |--------------------|---------------------------------------|--------------| | 选择年月 | 点击月份切换选择状态,支持多选 | 无(必选) | | 大租户占比(%) | 大租户在总租户中的占比(0-100) | 30 | | 生成租户数量 | 需生成的租户总数(≥1) | 10 | | 每月数据量(万条) | 每月订单数据生成量(≥1) | 1000 | #### 右侧:生成日志展示 - 实时显示数据生成进度(如“生成2023-01订单数据:50%”) - 日志分类标识:成功(绿色)、失败(红色)、启动(蓝色) - 支持手动清空日志,默认自动滚动到最新日志 ## 打包配置 在 `pom.xml` 中配置JAR包名称,避免默认的复杂名称: ```xml multi-tenant-order-generator-${project.version} org.springframework.boot spring-boot-maven-plugin 2.7.14 repackage ``` 执行打包命令:`mvn clean package`,生成的JAR包位于 `target` 目录下。 ## 核心逻辑说明 ### 1. 数据生成流程 1. 前端提交配置参数 → 后端校验参数合法性 2. 检查Redis中是否存在“生成中”状态(防重复提交) 3. 按大租户占比生成租户数据(大租户权重高,生成更多订单) 4. 按年月分批生成订单数据,使用批量插入优化性能 5. 实时将生成进度写入Redis → 前端轮询展示日志 ### 2. 多租户数据分配规则 - 大租户:数据权重为3-5(可配置),每个大租户生成订单量是小租户的3-5倍 - 小租户:数据权重为1,生成基础量订单 - 订单日期均匀分布在所选年月的每一天,模拟真实业务场景 ### 3. 日志管理机制 - 日志存储:Redis List结构,Key为`order_generator_logs` - 轮询频率:前端每2秒请求`/logs`接口获取最新日志 - 日志清理:支持手动清空(调用`/clearLogs`接口) ## 注意事项 1. 数据量建议:生成3000万条数据需占用约5-10GB数据库空间,建议在测试环境运行 2. 性能优化:批量插入时可调整MySQL配置(如`innodb_buffer_pool_size=4G`) 3. 端口冲突:若8080端口被占用,可在`application.yml`中添加`server.port: 8081`修改 4. 超时设置:生成大量数据时,可适当延长Redis和数据库连接超时时间 ## 问题排查 | 问题现象 | 排查步骤 | |---------------------------|--------------------------------------------------------------------------| | 启动失败,提示数据库连接异常 | 1. 检查MySQL服务是否启动;2. 确认IP、端口、密码是否正确;3. 检查数据库是否存在 | | 点击“生成”无响应 | 1. 确认是否已选择年月(必选);2. 查看浏览器控制台是否有JS报错;3. 检查是否正在生成 | | 日志不更新 | 1. 检查Redis服务是否正常;2. 查看后端日志是否有异常;3. 确认`/logs`接口是否返回数据 | | 数据生成缓慢 | 1. 减少单次生成年月数量;2. 优化MySQL批量插入配置;3. 检查服务器CPU/内存使用率 | ## 仓库地址 Gitee:[https://gitee.com/xhyym/order-data-generator](https://gitee.com/xhyym/order-data-generator) 如需补充项目启动脚本或更多环境配置说明,可随时在仓库提交Issues反馈。