1. 若依框架简介与IDEA环境准备
若依(RuoYi)是一个基于Spring Boot的Java EE企业级快速开发平台,它整合了Apache Shiro、MyBatis、Thymeleaf等主流技术栈。我第一次接触这个框架是在2018年,当时就被它完善的后台管理功能所吸引。经过多年迭代,现在的若依已经发展成包含单体架构、前后端分离、微服务等多种版本的全能型开发框架。
为什么选择若依?我总结了几点实战体会:
- 内置20+常用功能模块,包括用户权限、数据字典、定时任务等
- 代码生成器能自动生成前后端基础代码,节省50%以上的开发时间
- 完善的权限控制体系,支持按钮级和数据级权限
- 响应式布局完美适配PC/平板/手机
在IDEA中部署前需要准备:
- 硬件环境:建议8G以上内存(实测6G内存运行全套服务较吃力)
- 软件环境:
- JDK 1.8+(推荐JDK17)
- MySQL 5.7+(重要数据记得提前备份)
- Maven 3.6+
- IntelliJ IDEA 2021.3+(社区版即可)
提示:若依对Redis有强依赖,建议提前安装Redis 5.0+版本。我在Windows下使用Redis-x64-3.2.100.msi安装包时遇到过兼容性问题,换成5.0.14版本后解决。
2. 项目导入与基础配置
2.1 源码获取与导入
从Gitee克隆最新代码(国内镜像速度更快):
git clone https://gitee.com/y_project/RuoYi.git在IDEA中导入时有个小技巧:不要直接Open,而是选择"File -> New -> Project from Existing Sources",然后选择pom.xml文件。这样能确保Maven依赖正确加载。我遇到过直接Open导致依赖解析不全的情况,重新导入后解决。
导入成功后,建议立即执行以下操作:
- 右键项目 -> Maven -> Reimport
- 检查JDK版本(File -> Project Structure)
- 设置Maven本地仓库(避免重复下载依赖)
2.2 数据库配置
若依需要两个核心数据库表:
- 创建名为
ry的数据库 - 执行sql目录下的
quartz.sql和ry_2021xxxx.sql(具体文件名看版本)
常见踩坑点:
- MySQL 8.0+需要修改驱动为
com.mysql.cj.jdbc.Driver - 时区问题建议在连接串添加
?serverTimezone=Asia/Shanghai - 字符集推荐使用
utf8mb4(支持emoji表情存储)
示例配置(application.yml):
datasource: url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 1234563. 核心模块深度解析
3.1 权限控制系统
若依的权限体系是我见过最完善的之一,其核心实现位于ruoyi-framework模块:
Shiro配置类:ShiroConfig.java中定义了:
- 密码加密方式(默认MD5+盐值)
- 拦截器链(anon/authc/roles/perms等)
- Session管理策略
权限校验流程:
- 用户登录时
LoginService调用ShiroRealm进行认证 - 前端请求携带
Authorization头(JWT模式) - 后端通过
@RequiresPermissions注解校验权限
实际项目中我经常扩展的功能:
- 增加数据权限过滤(基于部门/角色)
- 集成OAuth2.0第三方登录
- 添加登录失败锁定机制
3.2 代码生成器原理
这个功能简直是我的生产力倍增器,其核心代码在GenController和VelocityInitializer:
生成步骤:
- 读取数据库元数据获取表结构
- 使用Velocity模板引擎渲染
- 输出到指定目录(可自定义)
模板文件路径:
resources/vm/java/domain.java.vm resources/vm/xml/mapper.xml.vm我通常会做这些优化:
- 修改模板增加Swagger注解
- 自动生成前端API文件
- 添加数据校验注解(如@NotBlank)
4. 高级配置与调优
4.1 多环境部署
建议配置不同环境的profile:
spring: profiles: active: dev # 可切换为test/prod对应的配置文件:
- application-dev.yml(开发环境)
- application-prod.yml(生产环境)
4.2 性能优化建议
根据我的压测经验(JMeter测试):
- Redis缓存:开启二级缓存后QPS提升3倍
@Cacheable(value = "userCache", key = "#userId") public User getUserById(Long userId) - 线程池优化:修改
ThreadPoolConfig参数task.pool.core-size=20 task.pool.max-size=100 - SQL监控:开启Druid监控
druid: stat-view-servlet: enabled: true login-username: admin login-password: 123456
4.3 常见问题解决方案
问题1:启动时报Table 'ry.QRTZ_LOCKS' doesn't exist
- 原因:quartz表未初始化
- 解决:执行sql目录下的quartz.sql
问题2:前端页面样式错乱
- 检查Nginx配置是否正确代理静态资源
- 清理浏览器缓存(特别是Thymeleaf模板)
问题3:代码生成器报Velocity异常
- 确认resources/vm目录存在
- 检查文件权限(Linux环境下常见)
5. 二次开发实战建议
经过多个项目的实践,我总结出这些开发规范:
- 分包策略:
com.xxx ├── common # 公共模块 ├── system # 系统核心 └── business # 业务模块 - 日志规范:
// 使用Lombok简化 @Slf4j public class XxxService { public void demo() { log.debug("调试信息"); log.info("业务日志"); } } - API设计原则:
- 统一返回Result对象
- 错误码规范(参考
HttpStatus) - 接口版本控制(/api/v1/xxx)
对于需要扩展的功能模块,建议采用插件化开发模式。比如要添加支付功能:
- 新建
ruoyi-modules-pay模块 - 实现
PayService接口 - 通过SPI机制自动注册
最后分享一个实用技巧:在IDEA中打开"Services"窗口(View -> Tool Windows -> Services),可以同时监控多个Spring Boot应用的运行状态,特别适合微服务调试。