环境搭建与项目复刻指南
📍 本章把前面所有模块串起来,回答一个问题:拿到一份 RuoYi-Vue-springboot3 源码,如何一步步把它跑起来,甚至造出你自己的后台? 前半段是「照抄可用」的部署手册,后半段是「知其所以然」的复刻要点。
1. 技术栈前置清单
复刻该项目,本机必须具备以下环境:
| 组件 | 版本建议 | 用途 |
|---|---|---|
| JDK | 17(必须,>主要依赖 jakarta.* 命名空间与新特性) |
编译/运行 |
| Maven | 3.6+ | 构建 6 个模块 |
| MySQL | 5.7 / 8.0 | 业务数据(库名 ry-vue) |
| Redis | 5.0+(含 Lua 脚本支持) | 会话/验证码/限流/字典缓存 |
| Node.js + npm/pnpm | 16+ | 前端 ruoyi-ui |
| IDE | IntelliJ IDEA(可选) | 开发/调试 |
⚠️ 注意:本
source/目录只包含后端(ruoyi-admin等 6 个 Maven 模块)。前端ruoyi-ui(Vue3 + Vite + Element Plus)是独立仓库,需单独获取(官方 Gitee「RuoYi-Vue」/「若依 RuoYi-Vue」前端仓库,或后端对应的ruoyi-ui目录)。
graph LR
subgraph 必备运行时
JDK[JDK 17]
MAVEN[Maven]
MYSQL[(MySQL
库 ry-vue)]
REDIS[(Redis)]
NODE[Node.js
前端构建]
end
API[RuoYi-Vue-springboot3 后端
6 模块 → jar] --> MYSQL
API --> REDIS
UI[ruoyi-ui 前端
Vue3 + Vite] --> API
2. 环境变量与工具验证
1 | # 验证三件套版本(Windows PowerShell / Git Bash) |
若 JDK 只有 8/11,请安装 JDK17 并配置 JAVA_HOME;Spring Boot 3.x 强制 JDK 17 起步,版本不对会在编译期直接报 UnsupportedClassVersionError。
3. 数据库初始化(后端第一步)
3.1 建库并导入两份 SQL
1 | # 用 MySQL 客户端执行(也可在 Navicat/DataGrip 中执行) |
1 | -- 1. 建业务库 |
ry_20260417.sql一次性建好全部表并灌入初始数据(含sys_user的 admin 账号、菜单、角色、部门、字典)。quartz.sql建 Quartz 的表结构(qrtz_job_details、qrtz_triggers等),供 06 章 的SysJobServiceImpl.init()全量重建任务用。
4. 后端配置修改(三处关键)
4.1 数据源:ruoyi-admin/src/main/resources/application-druid.yml
1 | druid: |
4.2 服务/令牌:ruoyi-admin/src/main/resources/application.yml
1 | server: |
🔒 安全红线:生产部署必须把
token.secret换成随机长字符串,否则任何人可用已知密钥伪造 JWT(HS512 对称签名)。
4.3 安全锁定策略(application.yml)
1 | user: |
5. 启动 Redis 与后端
5.1 启动 Redis
1 | redis-server --daemonize yes # 后台启动 |
5.2 编译打包后端
1 | cd source/RuoYi-Vue-springboot3 |
六个模块会按依赖顺序自动构建:
common → system → framework → quartz → generator → admin(admin 打 fat jar)。
5.3 运行
1 | # 方式一:直接 java -jar |
启动成功标志(控制台 ASCII 大图):
1 | (♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ |
验证接口:
1 | curl http://localhost:8080/ # 返回欢迎语 |
6. 前端 ruoyi-ui 启动
前端独立于本 source,从 RuoYi 官方仓库获取 ruoyi-ui 目录后:
1 | cd ruoyi-ui |
默认登录:admin / admin123。
sequenceDiagram
participant B as 浏览器
前端:80
participant V as Vite 代理
/dev-api
participant A as 后端:8080
B->>V: 请求 /dev-api/xxx
V->>A: 转发 /xxx
A-->>B: JSON {code,msg,data}
7. 复刻核心要点(从 0 到可继续开发的你自己的后台)
如果不想机械抄,而是基于这套源码重建你自己的管理系统,把这几件事想清楚即完成 70%:
- 保留分层骨架:
common ↔(domain/utils/annotation)←system(business)+framework(auth/aop)←admin(controllers)。新增业务只改system与admin,framework/common基本不动。 - 新一张业务表:
- 建表 + 在
system/domain建实体(继承BaseEntity); - 建
mapper接口 + XML; - 建
service接口 + 实现(复用@DataScope权限、AjaxResult、分页startPage); - 在
admin建SysXxxController(继承BaseController,用@Log、@PreAuthorize)。
- 建表 + 在
- 前端添加菜单页面:DB 插入一条
sys_menu,buildMenus自动生成路由 → 权限串(perms)自动进LoginUser.permissions→@ss.hasPermi即时生效。无需改前端代码。 - 复用基础设施:登录态(JWT+Redis)、操作日志(
@Log)、数据权限(@DataScope)、限流(@RateLimiter)、防重复(@RepeatSubmit)、代码生成(导入表即可生成 CRUD)。 - 安全强化:改默认
admin密码、改token.secret、按需收紧@Anonymous与匿名端点。
8. 常见启动失败排查
| 症状 | 大概率原因 | 处理 |
|---|---|---|
| 连接 MySQL 失败 | 库没建/密码错/库名不符 | 核对 application-druid.yml 与 ry-vue 库 |
KEYS 慢/阻塞 |
Redis 数据量大不适用 keys(*) |
见 01章思考题 |
| 登录提示密码错但明明对 | Redis 没起/会话键过期 | redis-cli ping 确认,重启 Redis |
| 前端跨域/404 | 代理未配 / 端口不符 | 核对 vite.config.js proxy → :8080 |
| 验证码一直不过 | Redis 未启动(答案存不进) | 启动 Redis |
| JAR 启动即退 + 端口占用 | :8080 被占 |
换 server.port |
9. 总结:一图串起整个项目如何协作
graph TB
subgraph 数据层
MYSQL[(MySQL ry-vue)]
REDIS[(Redis)]
end
subgraph 后端
C[Controller admin] --> S[ServiceImpl system]
S --> MAP[Mapper+XML]
MAP --> MYSQL
C --> AOP[framework 切面
@Log/@DataScope/@RateLimiter]
AOP --> REDIS
SEC[Security/JWT] --> REDIS
end
subgraph 前端
UI[Vue3 页面]
end
UI -->|HTTP JSON| C
JOB[Quartz] --> S
GEN[代码生成器] -->|生成| C
- 请求来 →
JwtAuthenticationTokenFilter还原用户 → 路由到 Controller → Service 掺入数据权限 → Mapper 查库 →AjaxResult返回。 - 增删改查 →
@Log记操作日志(异步)、@DataScope注入行级权限、@RateLimiter门限。 - 定时与生成 → Quartz 动态任务(
invokeTarget反射)、代码生成器把新表一键变页面。
至此,从「启动类如何发现各模块」到「如何跑通登录认证、如何写业务、如何部署上线」,你已有一条完整闭环。回到 00-overview.md 复习整体,或进入 appendix-references.md 看参考资料与源码速查。