开源地址: https://gitee.com/jun-xtools/xtools-app.git
一、功能和用途
1.1 项目概述
| 项目属性 |
值 |
| 项目名称 |
xtools-app |
| 项目版本 |
1.0.0 |
| 父POM |
org.xujun:xtools-parent-cloud:5.0.0 |
| JDK版本 |
25 |
| 项目描述 |
低调大师工具箱,基础应用模块,适配JDK25 |
| 组织 |
org.xujun (https://www.xujun.org) |
xtools-app 是一套基于 Spring Boot 构建的企业级基础应用平台,提供系统管理、代码生成、监控管理等核心功能。项目采用多模块架构,支持独立部署(Standalone)和微服务部署两种模式。
1.2 技术特点
- 采用最新的 JDK 25 版本,充分利用虚拟线程(Virtual Thread)、ScopedValue 等新特性
- 基于 Spring Boot 4.0.6 构建,支持自动配置和快速开发
- 集成 Spring Cloud Alibaba 2025.1.0.0 微服务框架
- 使用 MyBatis-Plus 3.5.16 简化数据访问层开发
- 集成 Elasticsearch 实现日志存储和检索(Spring Data BOM 2025.1.5)
- 支持 Nacos 3.1.1 服务注册与发现、Sentinel 1.8.9 流量控制和熔断降级
- 使用 Redis 实现分布式缓存和会话管理
- 使用 RabbitMQ(Spring AMQP 4.0.3)实现异步消息处理
- 支持 Knife4j 4.5.0 自动生成 API 文档
- 使用 SM2/SM3 国密算法保障密码安全
1.3 核心功能
1.4 功能关系图
1.5 功能层次图
二、项目结构设计
2.1 整体架构
2.2 分层架构
2.3 模块职责
| 层级 |
职责 |
说明 |
| 过滤器层 |
请求拦截 |
HttpLogFilter 记录请求响应日志,AuthFilter 验证认证授权 |
| Controller层 |
接口暴露 |
接收请求、参数验证、调用Service、返回统一Result响应 |
| Service层 |
业务逻辑 |
事务控制、业务验证、调用Mapper、对象转换 |
| Service Base层 |
基础CRUD |
封装通用增删改查,减少重复代码 |
| Mapper层 |
数据访问 |
MyBatis-Plus Mapper,数据库操作 |
| Entity层 |
实体对象 |
数据库表映射实体 |
| DTO层 |
数据传输 |
请求DTO(req)、响应DTO(resp)、Excel DTO |
| Convert层 |
对象转换 |
MapStruct 转换器,Entity <-> DTO |
| Config层 |
配置管理 |
模块配置、白名单、初始化 |
| MQ层 |
消息处理 |
RabbitMQ 消息消费者 |
| Job层 |
定时任务 |
BaseJob 定时任务实现 |
| Utils层 |
工具方法 |
密码加密、数据源工具等 |
| AOP层 |
切面增强 |
Redis操作日志、存储操作日志 |
2.4 包结构设计
xtools.app.{module}
├── controller # 控制器
├── service # 服务接口
│ ├── base # 基础CRUD服务接口
│ └── impl # 服务实现
├── mapper # MyBatis Mapper
├── model
│ ├── entity # 实体类
│ ├── dto
│ │ ├── req # 请求DTO(AddReq, UpdateReq, PageReq)
│ │ ├── resp # 响应DTO
│ │ └── excel # Excel导入导出DTO
│ └── vo # 视图对象
├── convert # MapStruct 对象转换器
├── config # 模块配置
├── utils # 工具类
├── mq # RabbitMQ 消息消费者
├── job # 定时任务
├── enums # 枚举类
├── init # 初始化(ApplicationRunner)
└── aop # AOP切面
2.5 系统边界视图
三、项目功能设计
3.1 认证授权设计
3.1.1 登录认证流程
3.1.2 Token管理机制
Token 基于 UUID 生成,存储在 Redis 中,包含四种键类型:
| Redis Key |
说明 |
TTL |
accessToken:{uuid} |
Token -> 登录用户映射 |
60分钟 |
refreshToken:{uuid} |
刷新Token -> AccessToken映射 |
60分钟 |
user:{userId} |
用户 -> Token映射(单设备登录) |
60分钟 |
mask:{userId} |
数据脱敏忽略标记 |
按配置 |
Token 刷新流程:客户端使用 refreshToken 请求 GET /sys/login/refresh/{refreshToken},后端查找对应的 accessToken,获取登录用户信息,生成新的 Token 对。
3.1.3 授权设计(RBAC模型)
3.1.4 权限验证流程
3.1.5 权限缓存初始化
系统启动时 InitSys(ApplicationRunner, Order: 200)执行权限缓存加载:
- 查询所有
SysInterfacePerm 记录
- 按
模块名:HTTP方法 分组
- 以 JSON 字符串存入 Redis Hash(key:
AUTH_SYS_URI)
- 使用
ScopedValue 传递日志追踪上下文
3.2 日志管理设计
3.2.1 日志类型
| 日志类型 |
说明 |
存储方式 |
| HTTP请求日志 |
请求URI、方法、参数、IP、Header |
RabbitMQ异步 |
| HTTP响应日志 |
响应状态码、Header、Body、耗时 |
RabbitMQ异步 |
| 操作日志 |
用户操作记录、权限验证记录 |
MySQL + RabbitMQ |
| 系统日志 |
各类系统事件 |
MySQL / Elasticsearch |
| Redis操作日志 |
缓存操作记录 |
LogBus异步 |
| 存储操作日志 |
文件存储操作记录 |
LogBus异步 |
| 任务日志 |
定时任务执行记录 |
MySQL |
3.2.2 日志处理流程
3.2.3 Elasticsearch日志存储
当配置 sys.log.type=elasticsearch 时,EsSysLogServiceImpl(标记 @Primary)替代默认的 SysLogServiceImpl:
- 使用 Spring Data Elasticsearch Repository 存储日志
- 支持分页查询:
match_phrase(精确匹配)、wildcard(模糊匹配)、时间范围过滤
- 支持链路追踪查询:按
logIndex 和 logTime 排序,最多查询 10,000 条
- 支持按时间范围批量删除:
_delete_by_query
3.3 代码生成设计
3.3.1 代码生成流程
3.3.2 模板引擎配置
- 使用 Apache Velocity 2.4.1 模板引擎
- 模板从 classpath 加载,UTF-8 编码
- 通过
GenProperties 配置后端/前端应用名、模块名、作者、版本等参数
- 支持过滤字段(正则匹配字段注释)
- 支持排除表(配置不生成的表名)
3.3.3 生成代码结构
{backendAppName}/{moduleName}/{moduleName}-biz/src/main/java/{packageName}/{subPackageName}/
├── controller/
├── service/
│ ├── base/
│ └── impl/
├── mapper/
├── model/
│ ├── entity/
│ └── dto/
│ ├── req/
│ └── resp/
├── convert/
└── utils/
{frontendAppName}/src/{subPackageName}/{subModuleName}/
├── index.ts
└── {tableName}/index.vue
sql/
3.4 任务调度设计
3.4.1 任务类型
| 任务类型 |
说明 |
实现类 |
| DEL_SYS_LOG |
清理过期系统日志 |
SysLogJob |
| DEL_SYS_FILE |
清理过期文件 |
SysFileJob |
| DEL_DISABLE_SYS_USER |
清理禁用用户 |
SysUserJob |
| 自定义任务 |
动态定时任务 |
SysScheduledService |
3.4.2 定时任务实现
3.4.3 动态定时任务
SysScheduledService 提供动态定时任务管理:
- init():启动时从数据库加载所有启用的定时任务
- start():启动指定任务(创建 ScheduledTask 注册到 Spring TaskScheduler)
- stop():停止指定任务(取消 ScheduledTask)
- restart():重启指定任务
- run():立即执行一次任务
任务初始化通过 InitSysScheduled(ApplicationRunner, Order: 200)在系统启动时自动完成。
3.5 缓存设计
3.5.1 缓存策略
项目使用 Redis 作为主要缓存介质,所有缓存键和 TTL 通过 AppCache 枚举集中管理:
| 缓存Key |
TTL |
用途 |
UID_SM2 |
5分钟 |
SM2密钥对(每次登录生成) |
UID_CAPTCHA |
1分钟 |
验证码 |
AUTH_SYS_USER |
60分钟 |
登录用户Token |
AUTH_SYS_URI |
永久 |
URI权限缓存(启动加载) |
AUTH_CLOUD_TOKEN |
1分钟 |
微服务调用Token(一次性) |
LOCK_JOB |
5分钟 |
Job分布式锁 |
LOCK_SYS_USER |
按配置 |
用户锁定(密码错误超限) |
RISK_IP |
永久 |
IP风控黑名单 |
RISK_URI |
永久 |
URI风控黑名单 |
SYS_CACHE_PARAM |
永久 |
系统参数缓存 |
SYS_CACHE_AP_RULE |
永久 |
密码规则缓存 |
SYS_CACHE_JAR |
永久 |
JAR依赖缓存 |
SYS_CACHE_ADDR |
60分钟 |
IP归属地缓存 |
COUNT_SYS_USER_PASSWD_ERR |
永久 |
密码错误计数 |
3.5.2 Redis操作日志AOP
RedisServiceAop 切面环绕所有 RedisService 方法:
- 记录方法名、参数、返回值、执行时间
- 通过 LogBus 发布
REDIS 类型日志
- 仅在存在
LogTrack 上下文时记录
3.5.3 风控本地缓存
URI风控使用两级缓存架构:
- 一级缓存:Caffeine 本地缓存(20秒过期)
- 二级缓存:Redis String 缓存
- 查询顺序:Caffeine -> Redis
3.6 风控管理设计
- IP风控:启动时从数据库加载 IP 黑名单到 Redis Hash,支持动态添加/移除
- URI风控:使用 Caffeine + Redis 两级缓存,启动时从数据库加载 URI 黑名单字符串
- 风控数据来源:
SysRisk 实体,按 SysRiskType(IP/URI)分类存储
3.7 文件管理设计
文件生命周期状态:TEMP(临时) -> OK(确认)或 DELETE(删除/过期)
3.8 系统监控设计
SysMonitorController(/sys/monitor)提供以下监控端点:
| 端点 |
方法 |
说明 |
/sys/monitor/redis |
GET |
Redis 监控(内存、连接数、命中率等) |
/sys/monitor/mysql/{type} |
GET |
MySQL 监控(进程列表、InnoDB状态等) |
/sys/monitor/elasticsearch/{type} |
GET |
Elasticsearch 监控(集群健康、索引统计等) |
使用枚举类型选择不同的监控指标,委托给 boot 框架中的 RedisMonitor、MySqlMonitor、ElasticsearchMonitor 实现。
3.9 消息队列设计
队列定义:
| 队列 |
用途 |
消息类型 |
记录日志 |
sys.log |
异步日志存储 |
LogBody |
否 |
sys.task |
异步任务记录 |
TaskInfo |
是 |
错误处理:使用 SM3 哈希消息内容作为去重键,通过 Redis 计数器跟踪重试次数,最多重试 3 次。
四、编码规范设计
4.1 命名规范
类命名
| 类型 |
命名规范 |
示例 |
| 实体类 |
Sys + 功能名 |
SysUser、SysRole、SysMenu |
| 请求DTO |
Sys + 功能名 + AddReq/UpdateReq/PageReq |
SysUserAddReq |
| 响应DTO |
Sys + 功能名 + Resp |
SysUserResp |
| Excel DTO |
Sys + 功能名 + Excel |
SysUserExcel |
| Service接口 |
Sys + 功能名 + Service |
SysUserService |
| Service实现 |
Sys + 功能名 + ServiceImpl |
SysUserServiceImpl |
| Service Base |
Sys + 功能名 + BaseService |
SysUserBaseService |
| Controller |
Sys + 功能名 + Controller |
SysUserController |
| Mapper |
Sys + 功能名 + Mapper |
SysUserMapper |
| Convert |
Sys + 功能名 + Convert |
SysUserConvert |
| 枚举 |
功能名 + Enum |
SysRiskEnum |
| 配置类 |
功能名 + Config |
SysConfig |
| 初始化类 |
Init + 模块名 |
InitSys |
| 消息消费者 |
Sys + 功能名 + Mq |
SysLogMq |
| 定时任务 |
Sys + 功能名 + Job |
SysLogJob |
| 工具类 |
功能名 + Utils |
PasswdUtils |
方法命名
| 操作 |
命名规范 |
示例 |
| 查询单个 |
get + 功能名 |
getSysUser |
| 分页查询 |
page + 功能名 |
pageSysUser |
| 列表查询 |
list + 功能名 |
listSysRole |
| 新增 |
add + 功能名 |
addSysUser |
| 修改 |
update + 功能名 |
updateSysUser |
| 删除 |
delete + 功能名 + ByIds |
deleteSysUserByIds |
4.2 注释规范
类注释格式:
方法注释格式:
4.3 代码风格
- Lombok:使用
@Data、@Builder、@Slf4j、@AllArgsConstructor、@NoArgsConstructor 等注解简化 POJO 代码
- MapStruct:使用
@Mapper 注解定义对象转换器,编译期生成转换代码
- MyBatis-Plus:使用
BaseMapper 简化 CRUD 操作,IService 封装 Service 层通用方法
- 构造器注入:使用
@RequiredArgsConstructor(Lombok)替代 @Autowired 字段注入
- 统一返回格式:所有 API 响应使用
Result<T> 统一封装
- 统一异常处理:
BizError(业务错误)、BizWarning(业务警告)、UnauthorizedError(未授权)、BizPublicKeyError(密钥过期)
- API文档:使用
@Tag、@Operation、@Schema 注解生成 Knife4j API 文档
4.4 设计规范
- 分层原则:Controller -> Service -> Mapper,每层职责单一明确
- 单一职责:每个 Service 只负责一个业务领域
- 开闭原则:通过
@Primary 注解支持 Service 实现的运行时替换(如 EsSysLogServiceImpl 替换默认 SysLogServiceImpl)
- 基础抽象:
BaseService + BaseServiceImpl 封装通用 CRUD,业务 Service 只关注差异化逻辑
- 过滤器链:使用
@Order 控制过滤器执行顺序(HttpLogFilter: 200 -> AuthFilter: 201)
- 初始化模式:
ApplicationRunner + @Order 控制启动顺序
4.5 安全规范
| 安全措施 |
实现方式 |
说明 |
| 密码传输加密 |
SM2 非对称加密 |
服务端生成密钥对,客户端用公钥加密,服务端用私钥解密 |
| 密码存储加密 |
SM3 国密哈希 |
不可逆哈希存储,登录时对比哈希值 |
| 密钥管理 |
Redis 临时存储 |
SM2密钥对存储5分钟,防止重放攻击 |
| SQL安全 |
MyBatis-Plus 参数化查询 |
防止SQL注入 |
| 数据验证 |
@Valid 注解 |
请求参数校验 |
| 认证授权 |
Token + RBAC |
UUID Token + Redis + 接口权限 |
| 数据脱敏 |
MaskIgnoreUtils |
敏感字段按会话级别脱敏控制 |
| 账号锁定 |
Redis计数器 |
密码错误超限自动锁定 |
| 微服务认证 |
一次性Token |
Cloud Token 从 Redis Hash 删除后失效 |
五、项目依赖设计
5.1 核心框架依赖
| 依赖 |
版本 |
用途 |
| Spring Boot |
4.0.6 |
应用框架 |
| Spring Framework |
7.0.7 |
核心框架 |
| Spring Security |
7.0.5 |
安全框架 |
| Spring Data BOM |
2025.1.5 |
数据访问版本管理 |
| Spring AMQP |
4.0.3 |
RabbitMQ集成 |
| Jackson BOM |
2.21.2 |
JSON序列化(主) |
| Jackson BOM |
3.1.2 |
JSON序列化(新) |
| MyBatis Spring Boot Starter |
4.0.1 |
MyBatis集成 |
| MyBatis-Plus |
3.5.16 |
ORM增强工具 |
5.2 工具库依赖
| 依赖 |
版本 |
用途 |
| Lombok |
1.18.46 |
代码简化 |
| MapStruct |
1.6.3 |
对象映射 |
| FastJSON2 |
2.0.60 |
JSON处理 |
| Velocity |
2.4.1 |
模板引擎(代码生成) |
| Commons IO |
2.22.0 |
IO工具 |
| Commons Lang3 |
3.20.0 |
通用工具 |
| Commons Text |
1.15.0 |
文本处理 |
| Caffeine |
3.2.3 |
本地缓存(风控) |
5.3 安全相关依赖
| 依赖 |
版本 |
用途 |
| BouncyCastle |
1.84 |
SM2/SM3国密算法 |
| java-jwt |
4.5.1 |
JWT Token |
| Easy Captcha |
1.6.2 |
验证码生成 |
5.4 文档相关依赖
| 依赖 |
版本 |
用途 |
| Knife4j |
4.5.0 |
API文档增强 |
| Swagger Annotations |
2.2.48 |
OpenAPI注解 |
| SpringDoc OpenAPI |
3.0.3 |
OpenAPI文档生成 |
5.5 消息队列依赖
| 依赖 |
版本 |
用途 |
| Spring AMQP |
4.0.3 |
RabbitMQ集成(由Spring Boot 4.0.6管理) |
5.6 缓存依赖
| 依赖 |
版本 |
用途 |
| Spring Data Redis |
由Spring Boot管理 |
Redis集成 |
5.7 系统监控依赖
| 依赖 |
版本 |
用途 |
| OSHI |
6.12.0 |
系统信息采集 |
| Spring Boot Admin |
4.0.4 |
应用监控 |
5.8 数据库依赖
| 依赖 |
版本 |
用途 |
| Druid |
1.2.28 |
数据库连接池 |
5.9 文件处理依赖
| 依赖 |
版本 |
用途 |
| Fesod Sheet |
2.0.1-incubating |
Excel处理 |
| S3 SDK |
2.42.41 |
S3对象存储 |
5.10 其他工具依赖
| 依赖 |
版本 |
用途 |
| ip2region |
3.3.7 |
IP归属地查询 |
| UserAgentUtils |
1.21 |
浏览器标识解析 |
| pinyin4j |
2.5.1 |
拼音转换 |
| thumbnailator |
0.4.21 |
图片压缩 |
| mmseg4j-core |
1.10.0 |
中文分词 |
| ZXing |
3.5.4 |
二维码/条形码 |
| PDFBox |
3.0.7 |
PDF处理 |
| Jsoup |
1.22.2 |
HTML解析 |
| JUnit Jupiter |
6.0.3 |
单元测试 |
| Byte Buddy |
1.17.8 |
字节码操作 |
5.11 微服务相关依赖
| 依赖 |
版本 |
用途 |
| Spring Cloud |
2025.1.1 |
微服务框架 |
| Spring Cloud Alibaba |
2025.1.0.0 |
微服务组件 |
| Nacos Client |
3.1.1 |
服务注册与配置中心 |
| Sentinel |
1.8.9 |
流量控制与熔断降级 |
| Seata |
2.5.0 |
分布式事务 |
| RocketMQ |
5.3.1 |
消息队列(可选) |
| XXL-Job |
3.4.0 |
分布式任务调度(可选) |
所有 xtools 内部模块版本均为 5.0.0:
| 模块 |
用途 |
| xtools-core |
核心工具库 |
| xtools-web |
Web工具库 |
| xtools-extend |
扩展工具库 |
| xtools-api |
API接口定义 |
| xtools-boot-api |
Boot API模块 |
| xtools-boot-core |
Boot核心模块 |
| xtools-boot-cache-redis |
Redis缓存模块 |
| xtools-boot-db-mybatis |
MyBatis数据库模块 |
| xtools-boot-db-mybatis-plus |
MyBatis-Plus模块 |
| xtools-boot-elasticsearch |
Elasticsearch模块 |
| xtools-boot-ip |
IP地址模块 |
| xtools-boot-knife4j |
Knife4j文档模块 |
| xtools-boot-log |
日志模块 |
| xtools-boot-mask |
数据脱敏模块 |
| xtools-boot-mq-base |
MQ基础模块 |
| xtools-boot-mq-rabbit |
RabbitMQ模块 |
| xtools-boot-storage-base |
存储基础模块 |
| xtools-boot-storage-s3 |
S3存储模块 |
| xtools-boot-task |
任务模块 |
| xtools-boot-thread |
线程模块 |
| xtools-boot-web-base |
Web基础模块 |
| xtools-boot-web-filter |
Web过滤器模块 |
| xtools-cloud-alibaba-nacos |
Nacos集成 |
| xtools-cloud-alibaba-sentinel |
Sentinel集成 |
| xtools-cloud-call |
微服务调用 |
六、技术选型说明
6.1 JDK 25
- 选择原因:最新LTS版本,提供长期支持和性能优化
- 主要新特性:
- 虚拟线程(Virtual Threads):轻量级线程,大幅提升并发能力,项目中用于异步日志记录(
VirtualThreadTaskUtils.simple())
- Scoped Value:虚拟线程间的上下文传递,项目中用于
LogTrackHolder 上下文传播
- Structured Concurrency:结构化并发编程
- 改进的 ZGC/Shenandoah 垃圾回收器
- Pattern Matching 增强
- Record Classes 增强
6.2 Spring Boot 4.0.6
- Spring Framework 版本:7.0.7
- Spring Security 版本:7.0.5
- 主要特性:
- 支持 Jakarta EE 11
- 原生支持虚拟线程
- 改进的可观测性(Observability)
- 增强 GraalVM Native Image 支持
- 改进的自动配置机制
6.3 MyBatis-Plus 3.5.16
- 支持的 MyBatis 版本:4.0.1
- 主要特性:
- 简化 CRUD 操作(
BaseMapper、IService)
- 内置分页插件
- 条件构造器(
QueryWrapper、LambdaQueryWrapper)
- 自动填充、逻辑删除、乐观锁
- 代码生成器
- SQL 性能分析
6.4 Elasticsearch
- Spring Data BOM 版本:2025.1.5
- 主要特性:
- 全文搜索和倒排索引
- 分布式架构,高可用
- 近实时搜索
- 项目中用于系统日志的存储和检索,支持分页查询、链路追踪和批量删除
6.5 Redis
- 版本说明:由 Spring Boot 4.0.6 管理
- 主要特性:
- 高性能键值缓存
- 支持多种数据结构(String、Hash、List、Set、ZSet)
- 项目中用于:Token存储、权限缓存、风控数据、分布式锁、参数缓存等
- 通过
RedisService 封装操作,AOP切面记录操作日志
6.6 RabbitMQ
- 版本说明:Spring AMQP 4.0.3(由Spring Boot管理)
- 主要特性:
- 可靠消息传递(确认机制、持久化)
- 灵活路由(Direct/Fanout/Topic交换机)
- 消息确认和重试机制
- 项目中用于:异步日志存储、异步任务记录
- 自定义错误处理:SM3去重 + Redis计数器 + 最多3次重试
6.7 Nacos 3.1.1
- 选择原因:Spring Cloud Alibaba 生态核心组件
- 主要特性:
- 服务注册与发现
- 动态配置管理
- 健康检查
- 支持微服务部署模式
6.8 其他重要依赖版本
| 依赖 |
版本 |
用途 |
选择原因 |
| Sentinel |
1.8.9 |
流量控制与熔断降级 |
阿里开源,轻量级高可用 |
| FastJSON2 |
2.0.60 |
JSON序列化 |
高性能,国产开源 |
| Lombok |
1.18.46 |
代码简化 |
编译期注解处理,零运行时开销 |
| MapStruct |
1.6.3 |
对象映射 |
编译期生成,高性能 |
| Velocity |
2.4.1 |
模板引擎 |
代码生成模板渲染 |
| Knife4j |
4.5.0 |
API文档增强 |
增强Swagger UI,国人友好 |
| BouncyCastle |
1.84 |
加密库 |
SM2/SM3国密算法支持 |
| OSHI |
6.12.0 |
系统监控 |
跨平台系统信息采集 |
| Easy Captcha |
1.6.2 |
验证码生成 |
支持算术验证码、GIF动画验证码 |
| Fesod Sheet |
2.0.1-incubating |
Excel处理 |
Apache POI孵化项目 |
| Druid |
1.2.28 |
数据库连接池 |
阿里开源,监控功能完善 |
| Caffeine |
3.2.3 |
本地缓存 |
高性能,支持过期策略 |
| S3 SDK |
2.42.41 |
对象存储 |
AWS S3协议兼容 |
| Jackson |
2.21.2 |
JSON处理 |
Spring Boot默认JSON库 |
文档版本:v1.0
编写日期:2026-06-09
项目版本:1.0.0
父POM版本:xtools-parent-cloud:5.0.0
JDK版本:25
维护团队:xujun.org