秃头了
大家好,我是 艿艿 乃乃 。
花了小半年,肝了一个管理后台快速开发开源项目,嘿嘿。
项目地址是:
- Github:github.com/YunaiV/ruoy…
- Gitee:gitee.com/zhijiantian…
最近开始学习 uniapp,准备把微信小程序做个 c 端,嘿嘿。
求个 star,可以哇?
v1.0.0 更新日志
第一个版本,基于 RuoYi-Vue 重构,主要是三个方面:
- 代码的重构
- 技术选型的调整
- 后台功能的新增
因此,v1.0.0
的更新日志,分成这三方面来写。
代码的重构
- 调整整体代码结构,将多个 Maven Module 合并为单个,使用 Java package 进行拆分隔离,如 图 所示。原因是:随着业务逻辑的逐步复杂,多个 Maven Module 的依赖关系的管理,会是一个很大的问题。
- 拆分 framework 为多个 Maven Module,按照 Web、Security、MyBatis、Redis 等不同组件,进行封装与拓展。
- 基于 JUnit5 与 Mockito,实现单元测试,保证功能的正确性,与代码的可维护性。一直自动化,一直爽!
- 增加 SpringBoot 多环境的配置文件,提供完善的 deploy.sh 部署脚本,以及 Jenkins 部署教程。
- 优化 Spring Security 实现权限的代码,提升可读性和维护性。
- 增加本地缓存(菜单、角色、数据字典等等),提升性能。通过 Redis 订阅发布,实现缓存的实时刷新。
- 增加 VO 类,作为 API 接口的响应对象,避免数据库实体与前端的直接耦合。
- 优化 操作日志,支持读取 Swagger 作为日志的内容。
- 优化 定时任务,支持执行失败的重试,更完善的执行日志。
- 优化 codegen 代码生成器,在原先生成 Controller、Service、Mapper、数据库实体、Vue 代码的基础上,额外生成 VO、单元测试的代码。
- 调整文件改用 数据库 存储,而不是文件系统。原因是,项目在部署多个服务节点时,文件需要做同步。未来,会增加阿里云、七牛云等存储云服务。
- 去除原有数据库的连表查询、递归查询,改为单表操作的方式,多次读取 + 内存拼接。
- 优化 Java 代码的格式,解决 IDEA 代码告警的问题。
后台功能的新增
- 增加 API 访问与异常日志,方便排查线上 API 的问题。
- 增加 全局错误码,统一业务异常的管理。管理后台会支持错误码的管理,支持提示文案的可配置化。
- 增加 短信模块,提供短信渠道、短息模板、短信日志的管理,对接阿里云、云片等主流短信平台。
- 增加 Redis Key 的管理,知道项目中使用到的 Redis Key 的格式、数据类型、过期时间、描述等等信息。
技术选型的调整
- 将 Spring Boot 版本,从 2.1.3 升级到 2.4.5 最新。
- 增加 bom 文件,统一 Maven 的依赖管理。
- 引入 MyBatis Plus 组件,简化 MyBatis 使用,提升开发效率。
- 引入 Redisson 组件,作为 Redis 的客户端,提供更强大的 Redis 操作。
- 基于 Redis 实现分布式消息队列的功能。接入 Redis Pub/Sub 实现广播消费,接入 Redis Stream 实现集群消费。
- 去除 fastjson,统一使用 Jackson 作为 JSON 库,老爆安全漏洞的悲伤。
- 引入 MapStruct 组件,实现数据库实体与 VO 类之间的转换。
- 引入 Lombok 组件,生成 setter、getter 等常用方法,去除冗余代码。
- 引入 Spring Async 功能,实现异步任务。例如说,异步记录 API 访问日志、管理员操作日志等等。
- 魔改 Apollo 组件,接入本地数据库,实现内嵌的配置中心。通俗的说,我们可以将原本添加到
application.yaml
的配置项,改为添加到数据库中,项目启动会进行读取。 - 引入 Hutool 组件,去除大量重复的工具类,也避免原本 Util 存在一些 bug 的问题。
- 引入 Screw 组件,实现数据库文档的生成,虽然好像现在用途较少。
- 引入 EasyExcel,提供 Excel 的导入与导出的功能。
- 实现 Idempotent 组件,实现幂等的功能,可以用来解决 HTTP 重复请求的问题。
- 引入 Lock4J,实现声明式的分布式锁的功能。虽然 Redisson 内置了分布式锁的功能,但是通过注解声明一个
@Lock4j
注解的使用方式,更加便利,且满足绝大多数场景。 - 去除原有的服务监控,使用 SpringBoot Admin 替代,提供更完整的监控能力。
- 引入 SkyWalking 组件,实现链路追踪和日志服务的功能。通过链路追踪,我们可以看到一个 API 请求涉及到的 MySQL、Redis 等操作;通过日志服务,我们可以方便的看到每个服务实例的日志。
- 引入 Resilience4j 组件,实现限流、熔断等功能,保证服务的稳定性。
- 引入 Knife4j,美化接口文档。原本所有 API 接口文档是缺失的,已经全部补全,可见 api-dashboard.yudao.iocoder.cn/doc.html 地址。
平台简介
芋道,一套全部开源的企业级的快速开发平台,毫无保留给个人及企业免费使用。
有任何问题,或者想要的功能,可以在 Issues 中提给艿艿。
- 前端采用 vue-element-admin。
- 后端采用 Spring Boot、MySQL、Redis。
- 权限认证使用 Spring Security & Token,支持多终端认证系统。
- 支持加载动态权限菜单,多方式轻松权限控制。
- 高效率开发,使用代码生成器可以一键生成前后端代码。
内置功能
分成三种内置功能:
- 系统功能
- 基础设施
- 研发工具
友情提示:本项目基于 RuoYi-Vue 修改,重构优化后端的代码,美化前端的界面。
额外新增的功能,我们使用 🚀 标记。
🙂 所有功能,都通过 单元测试 保证高质量。
系统功能
功能 | 描述 | |
---|---|---|
用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | |
在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 | |
角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | |
菜单管理 | 配置系统菜单,操作权限,按钮权限标识等 | |
部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | |
岗位管理 | 配置系统用户所属担任职务 | |
字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | |
🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、云片等主流短信平台 |
🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 |
登录日志 | 系统登录日志记录查询,包含登录异常 | |
🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 |
通知公告 | 系统通知公告信息发布维护 |
基础设施
功能 | 描述 | |
---|---|---|
🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 | |
🚀 | 文件服务 | 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件 |
🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | |
Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | |
🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |
🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |
🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 |
🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 |
🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 |
🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
研发工具
功能 | 描述 | |
---|---|---|
🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |
🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
表单构建 | 拖动表单元素生成相应的 HTML 代码 |
在线体验
演示地址:dashboard.yudao.iocoder.cn
- 账号密码:admin/admin123
文档地址:www.iocoder.cn/categories/…
未来会补充文档和视频,方便胖友冲冲冲!
技术栈
项目 | 说明 |
---|---|
yudao-dependencies | Maven 依赖版本管理 |
yudao-framework | Java 框架拓展 |
yudao-admin-server | 管理后台的服务端 |
yudao-admin-ui | 管理后台的 UI 界面 |
yudao-user-server | 用户前台的服务端 |
yudao-user-ui | 用户前台的 UI 界面 |
后端
框架 | 说明 | 版本 | 学习指南 |
---|---|---|---|
Spring Boot | 应用开发框架 | 2.4.5 | 文档 |
MySQL | 数据库服务器 | 5.7 | |
Druid | JDBC 连接池、监控组件 | 1.2.4 | 文档 |
MyBatis Plus | MyBatis 增强工具包 | 3.4.1 | 文档 |
Dynamic Datasource | 动态数据源 | 3.3.2 | 文档 |
Redis | key-value 数据库 | 5.0 | |
Redisson | Redis 客户端 | 3.1.46 | 文档 |
Spring MVC | MVC 框架 | 5.4.6 | 文档 |
Spring Security | Spring 安全框架 | 5.4.6 | 文档 |
Hibernate Validator | 参数校验组件 | 6.1.7 | 文档 |
Quartz | 任务调度组件 | 2.3.2 | 文档 |
Knife4j | Swagger 增强 UI 实现 | 3.0.2 | 文档 |
Resilience4j | 服务保障组件 | 1.7.0 | 文档 |
SkyWalking | 分布式应用追踪系统 | 8.5.0 | 文档 |
Spring Boot Admin | Spring Boot 监控平台 | 2.3.1 | 文档 |
Jackson | JSON 工具库 | 2.11.4 | |
MapStruct | Java Bean 转换 | 1.4.1 | 文档 |
Lombok | 消除冗长的 Java 代码 | 1.16.14 | 文档 |
JUnit | Java 单元测试框架 | 5.7.1 | - |
Mockito | Java Mock 框架 | 3.6.28 | - |
前端
框架 | 说明 | 版本 |
---|---|---|
Vue | JavaScript 框架 | 2.6.12 |
Vue Element Admin | 后台前端解决方案 | - |
演示图
系统功能
模块 | biu | biu | biu |
---|---|---|---|
登陆 & 首页 | |||
用户 | - | ||
部门 & 岗位 | - | ||
菜单 & 角色 | - | ||
审计日志 | - | ||
短信 | |||
字典 | - | ||
错误码 & 通知 | - |
基础设施
模块 | biu | biu | biu |
---|---|---|---|
文件 & 配置 | - | ||
定时任务 | - | ||
API 日志 | - | ||
MySQL & Redis | - | ||
监控平台 |
研发工具
模块 | biu | biu | biu |
---|---|---|---|
代码生成 | |||
文档 | - |