| 版本 |
日期 |
作者 |
说明 |
| 1.0.0 |
2025-11-17 |
Winston (Architect) |
初始版本 |
SVT (Seventeen) 是一个企业级管理系统,采用前后端分离架构,基于现代化技术栈构建。
┌─────────────────────────────────────────────────────────┐
│ 客户端层 (Client) │
│ React 19.1.0 + TypeScript 5.8.3 │
│ Ant Design 5.25.4 │
└─────────────────────────────────────────────────────────┘
│
HTTPS + AES-256 加密
│
┌─────────────────────────────────────────────────────────┐
│ API 网关 (Gateway) │
│ Nginx 反向代理 + 负载均衡 │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ 应用服务层 (Backend) │
│ Spring Boot 3.5.7 + Java 21 + MyBatis-Flex │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ 数据持久层 (Database) │
│ SQL Server 2019+ + Redis (可选) │
└─────────────────────────────────────────────────────────┘
| 技术 |
版本 |
用途 |
说明 |
| Spring Boot |
3.5.7 |
应用框架 |
企业级Java应用框架,提供自动配置和快速开发能力 |
| Java |
21 |
编程语言 |
LTS版本,支持虚拟线程、模式匹配等现代特性 |
| Maven |
3.x |
构建工具 |
依赖管理和项目构建 |
| 技术 |
版本 |
用途 |
说明 |
| MyBatis-Flex |
1.10.9 |
ORM 框架 |
轻量级 MyBatis 增强框架,提供灵活的查询构建器 |
| SQL Server JDBC |
12.8.1.jre11 |
数据库驱动 |
Microsoft SQL Server 连接驱动 |
| Druid |
1.2.24 |
连接池 |
阿里巴巴高性能数据库连接池,支持监控和SQL分析 |
选型理由:
- ✅ MyBatis-Flex: 相比传统MyBatis,提供类型安全的查询API,减少XML配置
- ✅ Druid: 强大的监控功能,支持SQL执行统计和慢查询分析
| 技术 |
版本 |
用途 |
说明 |
| Caffeine |
3.1.8 |
本地缓存 |
高性能Java本地缓存库,基于W-TinyLFU算法 |
架构决策:
- ✅ 本地缓存优先: 使用 Caffeine 替代 Redis,简化部署架构
- ✅ Session Sticky: 配合负载均衡的会话粘性,确保用户请求路由到同一实例
- ✅ 重启策略: 服务重启后缓存丢失,用户需要重新登录(安全设计)
缓存策略:
// JWT Token 缓存配置
Caffeine.newBuilder()
.maximumSize(1000) // 最多缓存1000个Token
.expireAfterWrite(30, MINUTES) // 30分钟后过期
.recordStats() // 记录统计信息
.build();
| 技术 |
版本 |
用途 |
说明 |
| Spring Security |
6.x (Spring Boot 3.5.7内置) |
安全框架 |
认证和授权框架 |
| JJWT |
0.11.5 |
JWT 实现 |
JSON Web Token 生成和验证 |
| BouncyCastle |
1.69 |
加密库 |
提供SM4、Argon2等加密算法 |
安全架构:
- API 加密: AES-256-CBC 模式
客户端请求 → AES加密 → 服务端解密 → 业务处理 → AES加密 → 客户端解密
- 配置加密: SM4 国密算法
# application.yml
spring:
datasource:
password: SM4@encrypted(xxx) # SM4加密密码
- 密码哈希: Argon2 算法
// Argon2 参数配置
saltLength: 16 bytes
hashLength: 32 bytes
memory: 65536 KB (64MB)
iterations: 3
parallelism: 1
- JWT 智能续期
活跃度周期: 600秒 (10分钟)
续期阈值: 20% (最后2分钟自动续期)
续期方式: 更新 lastActivityTime,无需生成新Token
| 技术 |
版本 |
用途 |
说明 |
| Knife4j |
4.5.0 |
API 文档 |
基于OpenAPI 3.0的文档工具,增强Swagger UI |
| SpringDoc OpenAPI |
2.6.0 |
OpenAPI 支持 |
Spring Boot 3.x 的 OpenAPI 集成 |
访问地址:
| 技术 |
版本 |
用途 |
说明 |
| Hutool |
5.8.16 |
Java 工具类 |
全面的Java工具类库,简化常见操作 |
| Guava |
32.1.3-jre |
Google 工具库 |
集合、缓存、并发等工具类 |
| Lombok |
1.18.34 |
代码简化 |
通过注解自动生成getter/setter/builder等 |
| 技术 |
版本 |
用途 |
说明 |
| Log4j2 |
2.x (Spring Boot内置) |
日志框架 |
高性能异步日志框架 |
| Disruptor |
3.4.4 |
异步日志 |
高性能异步日志队列,提升日志性能 |
日志配置:
<!-- log4j2-spring.xml -->
<Configuration>
<Appenders>
<!-- 异步日志 -->
<Async name="AsyncFile">
<AppenderRef ref="RollingFile"/>
</Async>
</Appenders>
</Configuration>
| 技术 |
版本 |
用途 |
说明 |
| JUnit 5 |
5.x (Spring Boot内置) |
单元测试 |
Java标准测试框架 |
| Spring Boot Test |
3.5.7 |
集成测试 |
Spring Boot测试支持 |
| Mockito |
内置 |
Mock 框架 |
模拟对象框架 |
| 技术 |
版本 |
用途 |
说明 |
| React |
19.1.0 |
UI 框架 |
最新版本,支持并发特性和自动批处理 |
| TypeScript |
5.8.3 |
编程语言 |
严格类型检查,100%类型覆盖 |
| Vite |
6.3.5 |
构建工具 |
闪电般的HMR和构建速度,基于ESM |
选型理由:
- ✅ React 19: 最新稳定版,性能和开发体验最佳
- ✅ TypeScript: 提供类型安全,减少运行时错误
- ✅ Vite: 比Webpack快10-100倍的HMR,开发体验极佳
| 技术 |
版本 |
用途 |
说明 |
| Ant Design |
5.25.4 |
组件库 |
企业级React组件库,开箱即用 |
| Ant Design Icons |
5.6.1 |
图标库 |
Ant Design 配套图标库 |
| UnoCSS |
66.3.2 |
原子化CSS |
即时按需的原子化CSS引擎 |
UnoCSS 配置:
// uno.config.ts
export default defineConfig({
presets: [presetUno()],
transformers: [
transformerDirectives(),
transformerVariantGroup()
]
});
| 技术 |
版本 |
用途 |
说明 |
| Zustand |
5.0.5 |
全局状态 |
轻量级状态管理,无Redux样板代码 |
| TanStack React Query |
5.80.6 |
服务端状态 |
强大的异步状态管理和缓存 |
状态管理架构:
全局状态 (Zustand)
├── authStore.ts - 认证状态 (token, isAuthenticated)
├── userStore.ts - 用户信息 (user, session)
└── useAuth.ts - 组合Hook (协调各Store)
服务端状态 (React Query)
├── 自动缓存
├── 自动重新获取
├── 乐观更新
└── 后台同步
| 技术 |
版本 |
用途 |
说明 |
| React Router DOM |
7.6.2 |
路由管理 |
声明式路由,支持嵌套路由和数据加载 |
路由架构:
// 四层安全防护
<Route path="/" element={<ProtectedRoute />}>
<Route element={<BasicLayout />}>
<Route path="home" element={<HomePage />} />
<Route path="*" element={<DynamicPage />} /> // 动态路由
</Route>
</Route>
| 技术 |
版本 |
用途 |
说明 |
| Axios |
1.9.0 |
HTTP 客户端 |
基于Promise的HTTP库,支持拦截器 |
| Crypto-JS |
4.2.0 |
加密库 |
AES-256加密/解密 |
请求流程:
发起请求
↓
请求拦截器
├─ Token注入
├─ AES加密请求体
└─ 添加请求头
↓
服务端处理
↓
响应拦截器
├─ AES解密响应
├─ 会话状态处理
└─ 统一错误处理
↓
返回数据
| 技术 |
版本 |
用途 |
说明 |
| React Hook Form |
7.57.0 |
表单管理 |
高性能表单库,减少重新渲染 |
| Zod |
3.25.57 |
运行时验证 |
TypeScript优先的schema验证库 |
表单验证示例:
const schema = z.object({
loginId: z.string().min(1, '请输入登录ID'),
password: z.string().min(6, '密码至少6位')
});
const { register, handleSubmit } = useForm({
resolver: zodResolver(schema)
});
| 技术 |
版本 |
用途 |
说明 |
| @dnd-kit/core |
6.3.1 |
拖拽核心 |
现代拖拽工具包 |
| @dnd-kit/sortable |
10.0.0 |
排序支持 |
可排序列表组件 |
| 技术 |
版本 |
用途 |
说明 |
| Day.js |
1.11.13 |
日期处理 |
轻量级日期库,Moment.js替代品 |
| 技术 |
版本 |
用途 |
说明 |
| SQL Server |
2019+ |
关系型数据库 |
微软企业级数据库 |
数据库特性:
- ✅ 事务支持: ACID完整性保证
- ✅ 分布式锁: 使用数据库主键唯一性实现分布式锁
- ✅ 分布式ID: 基于数据库表实现分布式ID生成
- ✅ 逻辑删除: del_flag字段标记删除,数据不物理删除
| 技术 |
版本 |
用途 |
说明 |
| Redis |
可选 |
缓存/队列 |
当前架构使用Caffeine本地缓存,Redis为可选扩展 |
设计决策:
- ✅ 简化部署: 初期使用Caffeine本地缓存,减少外部依赖
- ✅ 按需扩展: 当并发量增大时,可平滑切换到Redis分布式缓存
| 工具 |
用途 |
说明 |
| IntelliJ IDEA |
后端开发 |
Java开发首选IDE |
| Visual Studio Code |
前端开发 |
轻量级编辑器,插件生态丰富 |
| 工具 |
用途 |
说明 |
| Git |
版本控制 |
分布式版本控制系统 |
| GitHub/GitLab |
代码托管 |
代码仓库和协作平台 |
| 工具 |
用途 |
说明 |
| SQL Server Management Studio |
数据库管理 |
微软官方数据库管理工具 |
| Azure Data Studio |
跨平台数据库工具 |
轻量级SQL Server客户端 |
| 技术 |
版本 |
用途 |
说明 |
| Docker |
最新 |
容器化 |
应用容器化部署 |
| Docker Compose |
最新 |
编排工具 |
多容器应用编排 |
容器化架构:
services:
svt-server:
image: svt-server:1.0.0
ports:
- "8080:8080"
svt-web:
image: svt-web:1.0.0
ports:
- "80:80"
sqlserver:
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- "1433:1433"
| 技术 |
版本 |
用途 |
说明 |
| Nginx |
最新 |
反向代理 |
前端静态资源服务 + API代理 |
Nginx 配置:
# Session Sticky 负载均衡
upstream svt-backend {
ip_hash; # 基于IP的会话粘性
server svt-server-1:8080;
server svt-server-2:8080;
}
server {
listen 80;
# 前端静态资源
location / {
root /usr/share/nginx/html;
try_files $uri /index.html;
}
# API 代理
location /api/ {
proxy_pass http://svt-backend;
proxy_set_header X-Real-IP $remote_addr;
}
}
| 工具 |
用途 |
说明 |
| Jenkins |
持续集成 |
自动化构建和部署 |
| GitHub Actions |
持续集成 |
GitHub原生CI/CD |
CI/CD 流程:
代码提交
↓
自动化测试
├─ 单元测试
├─ 集成测试
└─ E2E测试
↓
构建镜像
├─ 后端: mvn package + docker build
└─ 前端: npm run build + docker build
↓
部署到环境
├─ Dev (自动)
├─ UAT (手动批准)
└─ Prod (手动批准)
# Java 21
java -version
# openjdk version "21.0.1"
# Maven 3.8+
mvn -version
# Apache Maven 3.8.6
# SQL Server 2019+
# Developer Edition (开发环境)
# Node.js 18+
node -v
# v18.17.0
# npm 9+
npm -v
# 9.6.7
# 推荐使用 pnpm
npm install -g pnpm
后端 (.env 或 系统环境变量):
# SM4 配置加密密钥
SM4_ENCRYPTION_KEY=your_sm4_key_32_chars_long_xxx
# API 加密密钥 (32字符)
SVT_AES_KEY=your_32_char_aes_key_1234567890123456
# 数据脱敏开关
SENSITIVE_ENABLED=true
前端 (.env.development):
# API 地址
VITE_API_BASE_URL=http://localhost:8080
# AES 密钥 (必须与后端一致)
VITE_AES_KEY=your_32_char_aes_key_1234567890123456
# 调试模式
VITE_DEBUG_MODE=true
- ✅ 选择成熟稳定的技术栈
- ✅ 优先选择LTS版本 (Java 21, Node.js 18+)
- ✅ 关键依赖使用经过生产验证的版本
- ✅ 本地缓存优先 (Caffeine > Redis)
- ✅ 构建工具选择 (Vite > Webpack)
- ✅ ORM框架选择 (MyBatis-Flex > MyBatis-Plus)
- ✅ 多层加密 (API: AES-256, 配置: SM4, 密码: Argon2)
- ✅ 最小权限原则
- ✅ 安全的默认配置
- ✅ 类型安全 (TypeScript 100%覆盖)
- ✅ 热更新 (Vite HMR)
- ✅ 代码生成 (Lombok, MyBatis-Flex Processor)
| 升级项 |
当前版本 |
目标版本 |
优先级 |
| React |
19.1.0 |
最新 |
P1 |
| Ant Design |
5.25.4 |
最新 |
P2 |
| Spring Boot |
3.5.7 |
3.6.x |
P2 |
- 评估 Java 21 新特性使用情况
- 评估 React Query 升级到 v6
- 评估 Vite 6.x 性能改进
| 问题 |
严重程度 |
解决方案 |
优先级 |
| 缺少单元测试 |
高 |
补充测试覆盖率到80% |
P0 |
| 缺少E2E测试 |
高 |
引入Playwright/Cypress |
P0 |
| API层缺少重试机制 |
中 |
添加指数退避重试 |
P1 |
- Spring Boot 3.x 迁移指南
- React 19 新特性解读
- Vite 6.x 性能优化
- 企业级安全加密实践
| 日期 |
版本 |
更新内容 |
作者 |
| 2025-11-17 |
1.0.0 |
初始版本,完整技术栈文档 |
Winston (Architect) |
文档维护: 本文档应在每次技术栈重大升级时更新
最后更新: 2025-11-17
负责人: Winston (System Architect)