# 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反馈。