若依-项目介绍
# 若依-项目介绍
# 一、项目介绍
若依(RuoYi)是一套基于 Spring Boot + Vue.js 的前后端分离开发框架,适用于构建企业级应用。它集成了常见的技术栈,提供了完整的权限管理、代码生成、系统监控等功能模块,能够大幅提高开发效率。
# 二、文件结构
# 1. 后端结构
若依的后端代码遵循了模块化设计,以下是各个模块的详细说明:
com.ruoyi
├── common // 工具类
│ ├── annotation // 自定义注解,定义用于标记特殊行为的方法或类,如权限检查、日志记录等。
│ ├── config // 全局配置,存放系统的全局性配置类,如数据源配置、Redis 配置等。
│ ├── constant // 通用常量,定义系统中常用的全局性常量,如状态码、用户角色等。
│ ├── core // 核心控制,包含通用的业务逻辑和控制类。
│ ├── enums // 通用枚举,定义系统中的枚举类型,如用户状态、操作类型等。
│ ├── exception // 通用异常,定义系统的异常处理机制,包含自定义异常类和全局异常处理。
│ ├── filter // 过滤器处理,存放各种 Servlet 过滤器类,用于请求的预处理或后处理。
│ └── utils // 通用工具类,包含各种常用的工具类方法,如字符串处理、日期处理、文件操作等。
├── framework // 框架核心
│ ├── aspectj // 注解实现,存放 AOP 切面类,用于处理注解的具体实现逻辑,如日志记录、事务管理等。
│ ├── config // 系统配置,包含系统的核心配置类,如安全配置、跨域配置、缓存配置等。
│ ├── datasource // 数据权限,处理数据层面的权限控制逻辑。
│ ├── interceptor // 拦截器,定义各种请求拦截器,如权限拦截、登录拦截等。
│ ├── manager // 异步处理,负责处理异步任务的管理和调度,如任务队列、线程池管理等。
│ ├── security // 权限控制,定义安全框架相关的类,如权限验证、用户认证等。
│ └── web // 前端控制,包含 Web 层的控制类,如跨域处理、静态资源管理等。
├── ruoyi-generator // 代码生成(可移除),提供根据数据库表自动生成代码的功能,如 CRUD 代码生成。
├── ruoyi-quartz // 定时任务(可移除),基于 Quartz 实现的定时任务管理模块。
├── ruoyi-system // 系统代码,存放系统的主要业务逻辑模块,如用户管理、角色管理、菜单管理等。
├── ruoyi-admin // 后台服务,系统的主入口,包含启动类和基础配置。
├── ruoyi-xxxxxx // 其他模块,根据业务需求新增的模块。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 2. 前端结构
若依的前端代码使用 Vue.js 开发,以下是各个文件夹的详细说明:
├── build // 构建相关,包含项目的构建脚本和配置文件。
├── bin // 执行脚本,存放项目启动和部署的脚本文件。
├── public // 公共文件,存放不需要编译的静态资源文件。
│ ├── favicon.ico // favicon图标,浏览器标签页的小图标。
│ ├── index.html // html模板,项目的主页面模板。
│ └── robots.txt // 反爬虫文件,限制搜索引擎的爬取行为。
├── src // 源代码,存放主要的前端代码。
│ ├── api // 所有请求,定义与后端交互的 API 接口。
│ ├── assets // 主题、字体等静态资源,如图片、样式文件等。
│ ├── components // 全局公用组件,定义可复用的 Vue 组件。
│ ├── directive // 全局指令,定义 Vue 的自定义指令。
│ ├── layout // 布局,定义页面的整体布局结构,如头部、侧边栏等。
│ ├── plugins // 通用方法,存放 Vue 插件和扩展功能。
│ ├── router // 路由,配置前端页面的路由规则。
│ ├── store // 全局 store管理,Vuex 状态管理,用于管理全局状态。
│ ├── utils // 全局公用方法,通用的工具类方法,如请求封装、权限验证等。
│ ├── views // 视图,定义各个页面视图组件。
│ ├── App.vue // 入口页面,应用的根组件。
│ ├── main.js // 入口文件,加载组件、初始化应用。
│ ├── permission.js // 权限管理,处理路由权限的验证逻辑。
│ └── settings.js // 系统配置,管理应用的全局配置。
├── .editorconfig // 编码格式,定义项目的统一编码风格。
├── .env.development // 开发环境配置,定义开发环境下的环境变量。
├── .env.production // 生产环境配置,定义生产环境下的环境变量。
├── .env.staging // 测试环境配置,定义测试环境下的环境变量。
├── .eslintignore // 忽略语法检查,配置 ESlint 忽略的文件或目录。
├── .eslintrc.js // eslint 配置项,定义 ESlint 的具体规则。
├── .gitignore // git 忽略项,配置 Git 忽略的文件或目录。
├── babel.config.js // Babel配置文件,定义 JavaScript 代码的转译规则。
├── package.json // 项目依赖文件,定义项目的依赖包和脚本命令。
└── vue.config.js // Vue CLI配置文件,定义项目的构建配置。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 三、配置文件
# 1. 通用配置 application.yml
application.yml
文件是 Spring Boot 项目的核心配置文件,用于定义项目的全局性配置。以下是主要配置项的详细说明:
# 项目相关配置
ruoyi:
# 项目名称
name: RuoYi
# 项目版本
version: 3.3.0
# 版权年份
copyrightYear: 2021
# 实例演示开关,控制系统是否开启演示模式
demoEnabled: true
# 文件上传路径,示例:Windows配置 D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath
profile: D:/ruoyi/uploadPath
# 获取IP地址开关,控制是否启用获取客户端IP地址功能
addressEnabled: false
# 验证码类型,支持 math(数学计算)和 char(字符验证)
captchaType: math
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
port: 8080
servlet:
# 应用的访问路径
context-path: /
tomcat:
# Tomcat的URI编码
uri-encoding: UTF-8
# Tomcat最大线程数,默认为200
max-threads: 800
# Tomcat启动初始化的线程数,默认值为25
min-spare-threads: 30
# 日志配置
logging:
level:
# 定义 com.ruoyi 包下的日志级别为 debug
com.ruoyi: debug
# 定义 Spring 框架的日志级别为 warn
org.springframework: warn
# Spring 配置
spring:
# 国际化资源信息配置
messages:
# 国际化资源文件路径
basename: i18n/messages
profiles:
# 指定当前活动的配置文件,默认为 druid
active: druid
# 文件上传配置
servlet:
multipart:
# 设置单个文件的最大上传大小为10MB
max-file-size: 10MB
# 设置总上传文件的最大大小为20MB
max-request-size: 20MB
# 开发工具配置
devtools:
restart:
# 开启热部署功能
enabled: true
# Redis 配置
redis:
# Redis 服务器地址
host: localhost
# Redis 服务器端口,默认值为6379
port: 6379
# 使用的数据库索引,默认值为0
database: 0
# Redis 连接密码(可选)
password:
# 连接超时时间,默认10秒
timeout: 10s
# Redis 连接池配置
lettuce:
pool:
# 连接池中的最小空闲连接数
min-idle: 0
# 连接池中的最大空闲连接数
max-idle: 8
# 连接池的最大连接数
max-active: 8
# 连接池最大阻塞等待时间,使用负值表示没有限制
max-wait: -1ms
# Token 配置
token:
# 令牌自定义标识,默认使用 Authorization
header: Authorization
# 令牌密钥,用于签名和验证令牌
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期,默认30分钟
expireTime: 30
# MyBatis 配置
mybatis:
# 搜索指定包中的别名
typeAliasesPackage: com.ruoyi.**.domain
# 配置 Mapper 的扫描路径,找到所有的 Mapper.xml 映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
# PageHelper 分页插件配置
pagehelper:
# 数据库方言,默认使用 MySQL
helperDialect: mysql
# 是否合理化分页查询,启用后分页参数不合理时会自动调整
reasonable: true
# 是否支持方法参数分页,启用后可以通过方法参数传递分页信息
supportMethodsArguments: true
# 分页插件的参数配置,默认使用 countSql 计算总数
params: count=countSql
# Swagger 配置
swagger:
# 是否开启 Swagger 文档,开发环境下建议开启
enabled: true
# 请求前缀,默认为 /dev-api
pathMapping: /dev-api
# 防止 XSS 攻击配置
xss:
# 过滤开关,控制是否启用 XSS 过滤
enabled: true
# 排除链接,多个用逗号分隔,指定不需要过滤的链接
excludes: /system/notice/*
# 匹配链接,指定需要过滤的链接
urlPatterns: /system/*,/monitor/*,/tool/*
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# 2. 数据源配置 application-druid.yml
application-druid.yml
文件用于配置项目的数据源信息,默认使用阿里巴巴的 Druid 数据库连接池。以下是主要配置项的详细说明:
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源配置
master:
# 数据库连接地址
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# 数据库用户名
username: root
# 数据库密码
password: password
# 从库数据源配置(可选)
slave:
# 从数据源开关,默认关闭
enabled: false
url:
username:
password:
# 初始连接数,连接池初始化时创建的连接数
initialSize: 5
# 最小连接池数量,连接池中保持的最小连接数
minIdle: 10
# 最大连接池数量,连接池中保持的最大连接数
maxActive: 20
# 获取连接等待超时的时间,单位为毫秒
maxWait: 60000
# 连接空闲时间检测周期,间隔多久检测空闲连接,单位为毫秒
timeBetweenEvictionRunsMillis: 60000
# 连接最小空闲时间,空闲连接在池中最小生存时间,单位为毫秒
minEvictableIdleTimeMillis: 300000
# 连接最大空闲时间,空闲连接在池中最大生存时间,单位为毫秒
maxEvictableIdleTimeMillis: 900000
# 检测连接是否有效的查询语句,默认使用 SELECT 1 FROM DUAL
validationQuery: SELECT 1 FROM DUAL
# 是否在空闲时检测连接的有效性
testWhileIdle: true
# 是否在借用连接时检测连接的有效性
testOnBorrow: false
# 是否在归还连接时检测连接的有效性
testOnReturn: false
# Druid 监控配置
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,允许访问监控的 IP 列表,不填则允许所有访问
allow:
# 监控页面的 URL 路径
url-pattern: /druid/*
# 控制台管理用户名
login-username:
# 控制台管理密码
login-password:
filter:
stat:
enabled: true
# 慢 SQL 记录开关,是否记录执行时间超过指定毫秒数的 SQL
log-slow-sql: true
# 慢 SQL 执行时间,单位为毫秒
slow-sql-millis: 1000
# 是否合并 SQL,开启后相同的 SQL 语句只记录一次
merge-sql: true
wall:
config:
# 是否允许多条 SQL 语句同时执行,默认允许
multi-statement-allow: true
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 3. 代码生成配置 generator.yml
generator.yml
文件用于配置代码生成器的相关信息,以下是主要配置项的详细说明:
# 代码生成配置
gen:
# 作者,生成的代码文件中会标注作者信息
author: ruoyi
# 默认生成包路径,指定生成代码的包路径,建议根据模块名称修改
packageName: com.ruoyi.system
# 是否自动去除表前缀,默认值为 false
autoRemovePre: false
# 表前缀,指定要去除的表前缀,多个前缀用逗号分隔,生成类名时不包含这些前缀
tablePrefix: sys_
2
3
4
5
6
7
8
9
10
# 四、核心技术
若依框架采用了当前主流的前后端技术栈,以下是各个技术栈的详细说明:
# 1. 后端技术栈
Spring Boot:一个开箱即用的 Java 框架,提供了各种默认配置,简化了 Spring 应用的配置和开发流程。主要特点包括:
- 内嵌 Web 容器(如 Tomcat、Jetty),无需额外部署。
- 支持自动配置,减少冗余代码。
- 提供运行时监控和健康检查功能。
MyBatis:一个优秀的持久层框架,支持自定义 SQL、存储过程以及高级映射,方便地处理数据库操作。
- 提供简单的 XML 配置和注解方式进行 SQL 映射。
- 支持动态 SQL 生成,简化复杂查询的实现。
Spring Security:一个强大的安全框架,用于保护基于 Spring 的企业应用程序。主要功能包括:
- 认证:用户身份验证,通过配置或数据库查询验证用户身份。
- 授权:访问控制,判断用户是否有权限访问特定资源。
- 防护:提供 XSS 攻击、CSRF 防护、Session 管理等安全防护功能。
Jwt:JSON Web Token,用于前后端分离项目中的用户认证和信息传递。
- JWT 包含用户身份信息,并使用密钥进行签名,确保信息的完整性和安全性。
- 支持跨域认证,减少了会话管理的复杂性。
# 2. 前端技术栈
npm:Node.js 的包管理工具,用于管理项目中的依赖包、插件和工具,便于统一管理和维护。
ES6:ECMAScript 6 是 JavaScript 的下一代标准,提供了许多新特性,如箭头函数、解构赋值、模板字符串等,简化了 JavaScript 的代码编写。
Vue.js:一款渐进式的 JavaScript 框架,用于构建用户界面。它的核心库只关注视图层,非常容易上手。Vue.js 提供了:
- 组件化:将 UI 分解成独立的、可复用的组件。
- 响应式:数据的变化会自动更新到视图中。
- 虚拟 DOM:通过虚拟 DOM 实现高效的 DOM 更新。
vue-router:Vue.js 官方的路由管理器,用
于构建单页面应用。它允许开发者使用声明式的方式配置路由,支持:
动态路由匹配:根据 URL 渲染不同的组件。
路由守卫:在路由切换前后执行自定义逻辑。
嵌套路由:支持多层次的路由嵌套,构建复杂的页面结构。
Vuex:Vue.js 官方的状态管理工具,用于在不同组件间共享状态。主要功能包括:
- 全局状态管理:集中管理应用中的所有状态。
- 数据持久化:通过插件支持持久化状态,如存储到 localStorage。
- 热重载:支持模块化和热重载,提高开发效率。
element-ui:基于 Vue.js 的开源 UI 组件库,提供了一套完整的 UI 组件,用于快速构建美观的用户界面。它包含:
- 表单组件:如输入框、选择器、开关等,满足各种表单需求。
- 布局组件:如栅格系统、布局容器等,帮助快速构建响应式布局。
- 数据展示组件:如表格、树形控件等,方便数据的可视化展示。