开源地址: 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 核心功能
限流降级 Sentinel、BlockException处理
日志管理 操作日志、系统日志、Elasticsearch存储
1.4 功能关系图
1.5 功能层次图
二、项目结构设计
2.1 整体架构
xtools-app-standalone 独立部署模块
sys-log-bus-elasticsearch ES日志存储
2.2 分层架构
HttpLogFilter 请求响应日志 Order: 200
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 系统边界视图
xtools-app-standalone 独立部署应用
sys-log-bus-elasticsearch ES日志存储
三、项目功能设计
3.1 认证授权设计
3.1.1 登录认证流程
前端获取验证码 GET /sys/login/captcha
前端获取SM2公钥 POST /sys/login/public-key
提交登录请求 POST /sys/login/passwd
生成Token UUID accessToken + refreshToken
缓存登录用户 Redis: AUTH_SYS_USER
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 权限验证流程
PremUtils.checkInterfacePerm
从URI提取模块名 如 /sys/user -> sys/user
查询Redis权限缓存 key: sys/user:GET
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 日志处理流程
包装Request/Response ContentCachingWrapper
发布到MQ RabbitMqEnums.SYS_LOG
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 代码生成流程
JDBC连接外部数据库 DatabaseMetaData
读取表字段 getColumns + getPrimaryKeys
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 定时任务实现
TaskBus -> RabbitMQ 队列: sys.task
SysTaskService.save 写入任务记录
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 风控管理设计
IpRisk检查 Redis Hash: RISK_IP
IP风控 :启动时从数据库加载 IP 黑名单到 Redis Hash,支持动态添加/移除
URI风控 :使用 Caffeine + Redis 两级缓存,启动时从数据库加载 URI 黑名单字符串
风控数据来源 :SysRisk 实体,按 SysRiskType(IP/URI)分类存储
3.7 文件管理设计
SysFileOptServiceImpl.upload
SysFileOptServiceImpl.download
文件生命周期状态: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 消息队列设计
消费者组1: SysLogMq 队列: sys.log 并发: 5-10
消费者组2: SysTaskMq 队列: sys.task 并发: 5-10
LogBusService.saveLog 存储日志
SysTaskService.save 存储任务记录
队列定义 :
队列
用途
消息类型
记录日志
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