xtools-app 项目设计文档
一、功能和用途
1.1 项目概述
- 项目名称:xtools-app
- 项目版本:1.0.0
- 父POM:org.xujun:xtools-parent-cloud:5.0.0
- 项目定位:基础应用平台,提供企业级应用开发的核心功能和公共模块,支持单体部署和微服务部署两种模式
- 组织:org.xujun
1.2 技术特点
- 采用最新的 JDK 25 版本,充分利用新特性(ScopedValue、虚拟线程、Record等)
- 基于 Spring Boot 4.0.5 构建,支持自动配置和快速开发
- 集成 Spring Cloud 2025.1.1 微服务框架
- 使用 Spring Cloud Alibaba 2025.1.0.0 微服务组件
- 使用 MyBatis-Plus 3.5.16 简化数据访问层开发(基于 MyBatis 4.0.1)
- 使用 Spring Data Elasticsearch(基于 Elasticsearch Client 9.2.6)实现日志存储和检索
- 支持 Nacos 3.1.1 服务注册与发现、配置中心
- 集成 Sentinel 1.8.9 实现流量控制和熔断降级
- 使用 Spring Data Redis(基于 Lettuce 6.8.2)实现分布式缓存
- 使用 Spring AMQP 4.0.2(RabbitMQ Client 5.27.1)实现异步消息处理
- 支持 Knife4j 4.5.0(基于 SpringDoc OpenAPI 3.0.3)自动生成 API 文档
- 使用 Druid 1.2.28 数据库连接池
- 使用 SM2/SM3 国密算法保障密码和数据安全
1.3 核心功能
二、项目结构设计
2.1 整体架构
2.2 分层架构
2.3 模块职责
| 层级 |
模块 |
职责说明 |
| Controller层 |
SysUserController、SysLoginController等 |
接收HTTP请求、参数验证(@Valid)、调用Service层、返回统一响应(Result) |
| Service层 |
SysUserServiceImpl、SysLoginServiceImpl等 |
实现业务逻辑、事务控制(@Transactional)、调用Mapper层、缓存操作 |
| BaseService层 |
SysUserBaseService等 |
继承MyBatis-Plus ServiceImpl,提供基础CRUD操作 |
| Mapper层 |
SysUserMapper、SysRoleMapper等 |
继承MyBatis-Plus BaseMapper,数据库访问、SQL执行 |
| Entity层 |
SysUser、SysRole、SysMenu等 |
数据库实体映射 |
| DTO层 |
Req(请求)、Resp(响应)、Excel |
数据传输对象 |
| Convert层 |
SysUserConvert、SysRoleConvert等 |
MapStruct对象转换 |
| Config层 |
SysConfig、ApiConfig等 |
配置类 |
| MQ层 |
SysLogMq、SysTaskMq等 |
消息队列消费者 |
| Job层 |
BaseJob、SysLogJob等 |
定时任务、异步任务 |
| Utils层 |
PasswdUtils、AuthUtils等 |
工具类 |
2.4 包结构设计
2.5 启动模块
项目支持两种部署模式:
| 模块 |
说明 |
| xtools-app-standalone |
单体部署模式,包含所有模块,通过 spring-boot-maven-plugin 打包为可执行JAR |
| xtools-app-sys-boot |
微服务模式 - 系统管理服务 |
| xtools-app-gen-boot |
微服务模式 - 代码生成服务 |
| xtools-app-monitor-boot |
微服务模式 - 监控服务 |
三、项目功能设计
3.1 认证授权设计
认证流程
验证码机制
系统支持两种验证码模式(随机切换):
- GIF动态验证码:基于 Easy Captcha 生成动态图片验证码
- 算术验证码:随机生成加减法算术题图片
验证码通过 Redis 缓存(AppCache.UID_CAPTCHA,过期时间60秒)。
RBAC权限模型
权限验证流程
认证模式
系统支持两种认证模式,通过请求头 Cloud 标识区分:
- 微服务认证:验证 Cloud Token(一次性令牌,Redis Hash存储)
- 常规认证:验证 UID + AccessToken + URI权限
3.2 日志管理设计
日志处理流程
日志类型
| 类型 |
说明 |
处理方式 |
| 操作日志 |
用户操作行为记录 |
LogFilter采集 -> MQ -> ES |
| 系统日志 |
系统运行日志 |
LogBus记录 -> MQ -> ES |
| 任务日志 |
定时任务执行日志 |
BaseJob记录 -> LogBus -> MQ -> ES |
| 错误日志 |
异常和错误信息 |
异常捕获 -> LogBus -> MQ -> ES |
日志配置
- 日志总线:基于
xtools-boot-log 封装,支持通过 LogBus.init() 链式调用记录日志
- 消息队列:使用 RabbitMQ 异步处理,并发度配置为 5-10
- 存储:日志存储到 Elasticsearch,通过
EsSysLogRepository 和 EsSysLogServiceImpl 实现
- 日志追踪:使用
LogTrackHolder(基于 ScopedValue)实现日志链路追踪
3.3 代码生成设计
代码生成流程
模板引擎
- 使用 Apache Velocity 2.4.1 模板引擎
- 通过
GenProperties 配置模板路径和生成参数
- 支持多种模板类型:Entity、Service、ServiceImpl、Mapper、Controller、Vue、TS API、SQL等
- 支持微服务 API 模块生成(可配置开关
openApi)
- 支持字典数据、脱敏数据等高级配置
代码生成特性
| 特性 |
说明 |
| 多数据源 |
支持 MySQL 等多种数据库类型 |
| 表结构同步 |
自动读取表和字段元数据 |
| 智能类型映射 |
自动将数据库类型映射为 Java 类型 |
| 表单类型推断 |
根据字段类型自动推断表单组件 |
| 查询方式推断 |
String类型默认LIKE,时间类型默认范围查询 |
| 模板配置 |
可配置后端和前端项目名称、模块路径等 |
| ZIP下载 |
生成的代码打包为ZIP文件下载 |
3.4 任务调度设计
任务实现
任务类型
| 类型 |
实现方式 |
说明 |
| 异步任务 |
BaseJob implements Runnable |
支持分布式锁,防止重复执行 |
| XXL-JOB |
xtools-boot-job-xxl(可选) |
分布式任务调度平台 |
| 定时任务 |
SysScheduled |
Spring Task 定时任务管理 |
| Spring任务 |
JobInterface.execute() |
Spring 原生任务执行接口 |
任务调度特性
- 分布式锁:使用 Redis
tryLock / releaseLock 实现分布式锁,防止多实例重复执行
- 日志追踪:通过
ScopedValue(JDK 25特性)实现任务执行上下文传递
- 异常处理:任务执行异常自动记录错误日志
- 超时控制:支持自定义锁超时时间
3.5 缓存设计
缓存策略
| 缓存Key |
说明 |
过期时间 |
xtools-app:uid:{uid}:sm2 |
SM2公钥缓存 |
5分钟 |
xtools-app:uid:{uid}:captcha |
验证码缓存 |
60秒 |
xtools-app:auth:sys:user:{token} |
用户认证信息 |
1小时 |
xtools-app:auth:sys:uri |
权限URI缓存 |
永不过期 |
xtools-app:auth:cloud:token |
微服务Token |
60秒 |
xtools-app:mq:msg:err:{id} |
MQ消息错误次数 |
60秒 |
xtools-app:lock:job:{className} |
任务分布式锁 |
5分钟 |
xtools-app:risk:ip:{ip} |
风控IP |
永不过期 |
xtools-app:risk:uri:{uri} |
风控URI |
永不过期 |
xtools-app:sys:cache:param:{key} |
系统参数缓存 |
永不过期 |
xtools-app:sys:cache:jar:{name} |
JAR包缓存 |
永不过期 |
xtools-app:sys:cache:addr:{key} |
地址缓存 |
1小时 |
缓存架构
3.6 文件存储设计
项目支持多种文件存储方式(通过 xtools-app-standalone 可选配置):
| 存储方式 |
模块 |
说明 |
| S3存储 |
xtools-boot-storage-s3 |
兼容S3协议的对象存储 |
| 本地文件 |
xtools-boot-storage-file |
本地文件系统存储(可选) |
四、编码规范设计
4.1 命名规范
类命名
| 类型 |
命名规范 |
示例 |
| 实体类 |
Sys + 模块名 |
SysUser、SysRole、SysMenu |
| 请求DTO |
模块名 + Req |
SysUserAddReq、SysUserPageReq |
| 响应DTO |
模块名 + Resp |
GenTableInfoResp |
| Excel DTO |
模块名 + Excel |
SysDictExcel |
| Service接口 |
模块名 + Service |
SysUserService |
| Service实现 |
模块名 + ServiceImpl |
SysUserServiceImpl |
| Base Service |
模块名 + BaseService |
SysUserBaseService |
| Controller |
模块名 + Controller |
SysUserController |
| Mapper |
模块名 + Mapper |
SysUserMapper |
| 转换器 |
模块名 + Convert |
SysUserConvert |
| 工具类 |
功能名 + Utils |
PasswdUtils、AuthUtils |
| 配置类 |
功能名 + Config 或 Properties |
SysConfig、GenProperties |
方法命名
| 操作 |
命名规范 |
示例 |
| 查询单个 |
getXxx |
getUserInfo() |
| 分页查询 |
pageXxx |
pageSysUser() |
| 新增 |
addXxx / saveXxx |
addSysUser() |
| 修改 |
updateXxx / editXxx |
editUserInfo() |
| 删除 |
delXxx / deleteXxx |
delSysUser() |
| 统计 |
countXxx |
— |
4.2 注释规范
类注释格式
方法注释格式
常量注释格式
4.3 代码风格
- Lombok:使用
@RequiredArgsConstructor 构造器注入,减少样板代码
- MapStruct:使用接口定义对象转换器,编译时自动生成实现
- MyBatis-Plus:继承
ServiceImpl 和 BaseMapper,简化CRUD操作
- 依赖注入:使用
@RequiredArgsConstructor + final 字段(构造器注入)和 @Resource(特殊场景)
- 统一返回:使用
Result<T> 统一响应格式
- 统一异常:使用
BizError(业务错误)和 BizWarning(业务警告)异常类
- JDK特性:使用
ScopedValue、switch表达式、record 等JDK 25特性
- 常量管理:通过
BaseParams 接口提供通用常量(CP_NUM0、CP_NUM1 等)
4.4 设计规范
- 分层原则:Controller -> Service -> Mapper 严格分层,禁止跨层调用
- 单一职责:每个模块负责单一业务领域
- 开闭原则:通过继承
BaseJob、BaseMessageHandle 等基类扩展功能
- 接口隔离:Service接口与BaseService接口分离,基础CRUD与业务逻辑分离
4.5 安全规范
- 密码加密:使用 SM3 国密算法加密存储密码,SM2 非对称加密传输密码
- SQL安全:使用 MyBatis-Plus 参数化查询,防止SQL注入
- 数据验证:使用
@Valid 注解进行请求参数验证
- 权限控制:基于 RBAC 模型的接口级别权限控制
- 数据脱敏:集成掩码机制(MaskIgnore),支持动态开关
五、项目依赖设计
5.1 核心框架依赖
| 依赖 |
版本 |
用途 |
| Spring Boot |
4.0.5 |
应用框架 |
| Spring Framework |
7.0.6 |
核心框架 |
| Spring Cloud |
2025.1.1 |
微服务框架 |
| Spring Cloud Alibaba |
2025.1.0.0 |
微服务组件 |
| Spring Data BOM |
2025.1.4 |
数据访问版本管理 |
| MyBatis-Plus |
3.5.16 |
ORM增强工具 |
| MyBatis Spring Boot Starter |
4.0.1 |
MyBatis集成 |
5.2 数据存储依赖
| 依赖 |
版本 |
用途 |
| Druid |
1.2.28 |
数据库连接池 |
| MySQL Connector/J |
9.6.0 |
MySQL数据库驱动 |
| Elasticsearch Client |
9.2.6 |
ES搜索引擎客户端 |
| Spring Data Redis |
(Spring Boot管理) |
Redis集成 |
| Lettuce |
6.8.2 |
Redis客户端 |
| Spring AMQP |
4.0.2 |
RabbitMQ集成 |
| RabbitMQ Client |
5.27.1 |
RabbitMQ客户端 |
5.3 微服务相关依赖
| 依赖 |
版本 |
用途 |
| Nacos Client |
3.1.1 |
服务注册与配置中心 |
| Sentinel |
1.8.9 |
流量控制与熔断降级 |
| Seata |
2.5.0 |
分布式事务(可用) |
| RocketMQ |
5.3.1 |
消息队列(可用) |
5.4 工具库依赖
| 依赖 |
版本 |
用途 |
| Lombok |
1.18.44 |
代码简化 |
| MapStruct |
1.6.3 |
对象映射 |
| FastJSON2 |
2.0.60 |
JSON处理 |
| Velocity |
2.4.1 |
模板引擎(代码生成) |
| Jackson |
2.21.2 |
JSON序列化 |
| Commons Lang3 |
3.20.0 |
通用工具 |
| Commons IO |
2.21.0 |
IO工具 |
| Commons Text |
1.15.0 |
文本处理 |
| Caffeine |
3.2.3 |
本地缓存 |
5.5 安全相关依赖
| 依赖 |
版本 |
用途 |
| BouncyCastle (bcprov-jdk18on) |
1.84 |
国密算法(SM2/SM3) |
| Easy Captcha |
1.6.2 |
验证码生成 |
| java-jwt |
4.5.1 |
JWT令牌 |
5.6 文档相关依赖
| 依赖 |
版本 |
用途 |
| Knife4j |
4.5.0 |
API文档增强 |
| SpringDoc OpenAPI |
3.0.3 |
OpenAPI文档 |
| Swagger Annotations |
2.2.48 |
API注解 |
5.7 系统监控依赖
| 依赖 |
版本 |
用途 |
| Spring Boot Admin |
4.0.3 |
应用监控 |
| OSHI Core |
6.11.1 |
系统信息采集 |
| Micrometer |
1.16.4 |
指标采集 |
5.8 文件处理依赖
| 依赖 |
版本 |
用途 |
| Fesod Sheet |
2.0.1-incubating |
Excel处理 |
| PDFBox |
3.0.7 |
PDF处理 |
| Thumbnailator |
0.4.21 |
图片压缩 |
| S3 SDK |
2.42.34 |
S3对象存储客户端 |
5.9 其他工具依赖
| 依赖 |
版本 |
用途 |
| XXL-Job Core |
3.4.0 |
分布式任务调度 |
| IP2Region |
3.3.7 |
IP归属地查询 |
| UserAgentUtils |
1.21 |
浏览器标识解析 |
| Pinyin4j |
2.5.1 |
拼音转换 |
| ZXing |
3.5.4 |
二维码/条形码 |
| JSoup |
1.22.1 |
HTML解析 |
| MMSEG4J |
1.10.0 |
中文分词 |
5.10 xtools 内部框架依赖
| 依赖 |
版本 |
用途 |
| xtools-core |
5.0.0 |
核心工具库 |
| xtools-web |
5.0.0 |
Web工具库 |
| xtools-extend |
5.0.0 |
扩展工具库 |
| xtools-api |
5.0.0 |
API基础库 |
| xtools-boot-api |
5.0.0 |
Boot API基础(Result、异常) |
| xtools-boot-core |
5.0.0 |
Boot核心(Holder、工具) |
| xtools-boot-cache-redis |
5.0.0 |
Redis缓存封装 |
| xtools-boot-db-mybatis-plus |
5.0.0 |
MyBatis-Plus封装 |
| xtools-boot-elasticsearch |
5.0.0 |
Elasticsearch封装 |
| xtools-boot-ip |
5.0.0 |
IP工具封装 |
| xtools-boot-knife4j |
5.0.0 |
Knife4j封装 |
| xtools-boot-log |
5.0.0 |
日志封装 |
| xtools-boot-mask |
5.0.0 |
数据脱敏封装 |
| xtools-boot-mq-base |
5.0.0 |
消息队列基础 |
| xtools-boot-mq-rabbit |
5.0.0 |
RabbitMQ封装 |
| xtools-boot-storage-base |
5.0.0 |
存储基础 |
| xtools-boot-storage-file |
5.0.0 |
本地文件存储 |
| xtools-boot-storage-s3 |
5.0.0 |
S3对象存储 |
| xtools-boot-task |
5.0.0 |
异步任务封装 |
| xtools-boot-thread |
5.0.0 |
线程池封装 |
| xtools-boot-web-base |
5.0.0 |
Web基础 |
| xtools-boot-web-filter |
5.0.0 |
Web过滤器基础 |
| xtools-boot-job-xxl |
5.0.0 |
XXL-Job集成 |
| xtools-cloud-alibaba-nacos |
5.0.0 |
Nacos集成 |
| xtools-cloud-alibaba-sentinel |
5.0.0 |
Sentinel集成 |
| xtools-cloud-call |
5.0.0 |
微服务远程调用 |
六、技术选型说明
6.1 JDK 25
- 选择原因:采用最新LTS版本,充分利用JDK新特性提升开发效率和运行性能
- 主要特性:
- ScopedValue:用于任务执行的上下文传递(LogTrackHolder),替代ThreadLocal
- Virtual Threads(虚拟线程):轻量级线程,提升高并发处理能力
- Switch表达式:简化条件分支代码
- Record:用于不可变数据载体
- Pattern Matching:增强的模式匹配能力
- 性能优化:ZGC/Shenandoah垃圾回收器优化
6.2 Spring Boot 4.0.5
- Spring Framework版本:7.0.6
- 主要特性:
- 支持JDK 17+,完美适配JDK 25
- 响应式编程支持(WebFlux)
- 可观测性增强(Micrometer 1.16.4集成)
- 虚拟线程支持
- Jakarta EE 10+ 规范支持
- GraalVM Native Image 支持
6.3 MyBatis-Plus 3.5.16
- MyBatis版本:4.0.1
- 主要特性:
- 简化CRUD操作,通过
ServiceImpl 和 BaseMapper 提供通用方法
- Lambda查询包装器,类型安全的条件构造
- 内置分页插件
- 代码生成器(本项目自研代码生成模块)
- 性能分析拦截器
6.4 Elasticsearch 9.2.6
- Spring Data BOM:2025.1.4
- 主要特性:
- 全文搜索引擎,用于日志存储和检索
- 高性能、分布式架构
- 支持近实时搜索
- 通过 Spring Data Elasticsearch 集成
6.5 Redis
- 客户端:Lettuce 6.8.2
- 主要特性:
- 高性能缓存,支持多种数据结构
- 分布式锁(tryLock/releaseLock)
- 认证信息缓存、权限缓存
- 会话管理、限流计数
6.6 RabbitMQ
- Spring AMQP:4.0.2
- RabbitMQ Client:5.27.1
- 主要特性:
- 可靠消息传递(消息确认机制)
- 灵活路由(Exchange + Queue + RoutingKey)
- 并发消费控制(concurrency配置)
- 错误处理和重试机制(MqErrorHandle)
6.7 Nacos 3.1.1
6.8 Sentinel 1.8.9
6.9 其他重要依赖版本
| 依赖 |
版本 |
用途 |
| Spring Cloud Alibaba |
2025.1.0.0 |
微服务框架 |
| Nacos |
3.1.1 |
服务注册与配置中心 |
| Sentinel |
1.8.9 |
流量控制与熔断 |
| FastJSON2 |
2.0.60 |
JSON序列化 |
| Lombok |
1.18.44 |
代码简化 |
| MapStruct |
1.6.3 |
对象映射 |
| Velocity |
2.4.1 |
模板引擎 |
| Knife4j |
4.5.0 |
API文档增强 |
| BouncyCastle |
1.84 |
加密库 |
| OSHI |
6.11.1 |
系统监控 |
| Easy Captcha |
1.6.2 |
验证码生成 |
| Fesod Sheet |
2.0.1-incubating |
Excel处理 |
| Jackson |
2.21.2 |
JSON处理 |
| Druid |
1.2.28 |
数据库连接池 |
| Spring Boot Admin |
4.0.3 |
应用监控 |
| java-jwt |
4.5.1 |
JWT令牌 |
| XXL-Job |
3.4.0 |
分布式任务调度 |
文档版本:v1.0
编写日期:2026-04-16
项目版本:1.0.0
父POM版本:xtools-parent-cloud:5.0.0
JDK版本:25
维护团队:xujun.org