世界百事通!项目讲解之火爆全网的开源后台管理系统RuoYi - 综合 -

当前位置:首页  >  综合  > 正文

世界百事通!项目讲解之火爆全网的开源后台管理系统RuoYi

世界百事通!项目讲解之火爆全网的开源后台管理系统RuoYi
2023-04-09 06:20:48 来源:腾讯云

博主是在2018年中就接触了 RuoYi 项目 这个项目,对于当时国内的开源后台管理系统来说,RuoYi 算是一个完成度较高,易读易懂、界面简洁美观的前后端不分离项目。

对于当时刚入行还在写 jsp 模板的博主来说,RuoYi 项目在后台基础功能、模块划分、易用性和页面美观度上,对比同期用 Java 开源的前后端不分离后台项目整体上是高了一个等级的。并且项目 commit 频繁,代码质量不断提高、bug不断修复,使得这个项目在今天来说任然是具有学习价值的。


(资料图)

本文博主尽量用一个理性视角带领大家由浅入深看 RuoYi 项目v4.7.6版本的优秀设计。

RuoYi 仓库地址:https://gitee.com/y_project/RuoYi版本:v4.7.6

一、快速了解

RuoYi 项目是一个基于 SpringBoot + Mybatis + Shiro开发的轻量级 Java 快速开发框架,它包含基础的后台管理功能以及权限控制。项目作者对于 RuoYi 项目的定调是这样的:

RuoYi是一款基于SpringBoot+Bootstrap的极速后台开发框架。RuoYi 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf、Bootstrap)。内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、通知公告等。在线定时任务配置;支持集群,支持多数据源,支持分布式事务。

二、多模块设计

如果想快速了解一个项目的设计理念那直接下载这个项目,查看项目结构即可略知一二。这里参考官网给出的项目结构:

com.ruoyi     ├── ruoyi-common            // 工具类│       └── annotation                    // 自定义注解│       └── config                        // 全局配置│       └── constant                      // 通用常量│       └── core                          // 核心控制│       └── enums                         // 通用枚举│       └── exception                     // 通用异常│       └── json                          // JSON数据处理│       └── utils                         // 通用类处理│       └── xss                           // XSS过滤处理├── ruoyi-framework         // 框架核心│       └── aspectj                       // 注解实现│       └── config                        // 系统配置│       └── datasource                    // 数据权限│       └── interceptor                   // 拦截器│       └── manager                       // 异步处理│       └── shiro                         // 权限控制│       └── web                           // 前端控制├── ruoyi-generator   // 代码生成(不用可移除)├── ruoyi-quartz      // 定时任务(不用可移除)├── ruoyi-system      // 系统代码├── ruoyi-admin       // 后台服务├── ruoyi-xxxxxx      // 其他模块

由上可知,RuoYi 前后端不分离项目按照模块划分成了七个模块

ruoyi-common包含了整个项目基础的注解、枚举、异常、帮助类的定义以及在 core 包中定义的基础用户、角色、菜单、字典类的 entity 对象以及其他 ajax 响应结果、分页参数、文本处理等一众基础类ruoyi-framework是整个项目的核心模块,因为这里面有整个项目的核心配置代码,全部在 config 目录下ruoyi-generator主要用作代码生成,目包含一个对外提供服务模块所需的 contrller、domain、mapper、service、util、config等包。如果添加 Spring Boot启动类就可以直接作为独立项目启动。作为 ruoyi-admin 模块的插件存在,通过增添 pom 依赖来控制插件是否开启ruoyi-quartz主要用作定时任务,集成了分布式定时任务调度框架 quartz ,目录与ruoyi-generator类似,也是作为 ruoyi-admin 模块的插件存在,通过增添 pom 依赖来控制插件是否开启ruoyi-system包含后台系统中非核心用户、角色、菜单、字典类实体对象之外的 mapper、service层功能代码ruoyi-admin用作后台web服务,包含后台系统的 controlelr层代码以及配置文件。也是整个 RuoYi 项目后台的启动入口ruoyi-xxxxxx作为由开发人员引入的其他模块,一般是新业务模块代码

最后再列出项目 ruoyi-admin的模块依赖图,简单讲解下各个模块间的依赖关系

ruoyi-common基础通用模块undefinedruoyi-system依赖ruoyi-common模块ruoyi-framework依赖ruoyi-system模块ruoyi-generator依赖ruoyi-common模块ruoyi-quartz依赖ruoyi-common模块ruoyi-admin依赖ruoyi-frameworkruoyi-generatorruoyi-quartz

看完了 RuoYi 的项目结构与模块依赖关系,大家可以看看自己日常开发业务后台的项目结构。或多或少,大家都可能遇到过那种一把梭所以代码都全部放在同一个 Maven 模块的项目。对比 RuoYi 的项目结构,相信大家都会觉得多模块设计是比单模块更优的设计。

拆分出ruoyi-common模块后,其他插件模块可以只引用ruoyi-common的通用代码就能完成插件功能开发。拆分出ruoyi-framework模块后,项目中的核心配置代码全部放在ruoyi-framework中与ruoyi-admin分离,防止对ruoyi-admin的修改影响到项目核心配置。博主认为合理的模块拆分可以减少模块间的耦合与改动模块所带来的影响范围。

通过多模块设计将项目划分成 common -> system -> framework -> admin由低到高的核心模块以及插件形式的 common -> ruoyi-generator|ruoyi-quartz模块。模块之间尽量松耦合,方便模块升级、增减模块。

三、优雅的操作日志记录

在 RuoYi 项目中通过 com.ruoyi.framework.aspectj.LogAspect日志切面,以自定义日志注解作为切点来记录日志信息,这样可以避免在接口中进行重复的操作日志记录代码编写,以及日志记录发生异常也不影响接口返回。

自定义日志注解如下:

/**  * 自定义操作日志记录注解  *  * @author ruoyi  */  @Target({ ElementType.PARAMETER, ElementType.METHOD })  @Retention(RetentionPolicy.RUNTIME)  @Documented  public @interface Log {      /**      * 模块      */      public String title() default "";      /**      * 功能      */      public BusinessType businessType() default BusinessType.OTHER;      /**      * 操作人类别      */      public OperatorType operatorType() default OperatorType.MANAGE;      /**      * 是否保存请求的参数      */      public boolean isSaveRequestData() default true;      /**      * 是否保存响应的参数      */      public boolean isSaveResponseData() default true;      /**      * 排除指定的请求参数      */      public String[] excludeParamNames() default {};  }

可以看到 LogAspect注解类中定义了模块名称、业务操作类型(新增、修改、删除、导出等业务操作)、操作人类别(其他、后台、手机等)、是否保存请求的参数、是否保存响应的参数、排除指定的请求参数等六个属性。我们在使用自定义注解时,通常只用根据接口作用指定模块名称和业务操作类型就可以,日志注解使用如下:

@Log(title = "参数管理", businessType = BusinessType.INSERT)  @PostMapping("/add")  @ResponseBody  public AjaxResult addSave(@Validated SysConfig config) {...}

自定义日志注解切面代码如下:

/**  * 操作日志记录处理  *  * @author ruoyi  */  @Aspect  @Component  public class LogAspect {      private static final Logger log = LoggerFactory.getLogger(LogAspect.class);      /** 排除敏感属性字段 */      public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword" ... };      /** 计算操作消耗时间 */      private static final ThreadLocal TIME_THREADLOCAL = new NamedThreadLocal("Cost Time");      /**      * 处理请求前执行      */      @Before(value = "@annotation(controllerLog)")      public void boBefore(JoinPoint joinPoint, Log controllerLog) {      TIME_THREADLOCAL.set(System.currentTimeMillis());      }      /**      * 处理完请求后执行      *      * @param joinPoint 切点      */      @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult")      public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) {      handleLog(joinPoint, controllerLog, null, jsonResult);      }      /**      * 拦截异常操作      *      * @param joinPoint 切点      * @param e 异常      */      @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")      public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) {      handleLog(joinPoint, controllerLog, e, null);      }      protected void handleLog(final JoinPoint joinPoint, Log controllerLog,         final Exception e, Object jsonResult)          ...    } }

通过 aop 切面对使用了日志注解的方法进行三个方面的切入:

@Before(value = "@annotation(controllerLog)")处理请求前执行记录日志记录开始时间@AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult")处理完请求后执行记录日志结束时间,填充操作日志最后异步插入@AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")以及处理完请求发生异常后执行记录日志结束时间,填充操作日志、异常原因最后异步插入日志

在使用了日志切面后,操作日志记录的逻辑与后台各功能接口的业务逻辑相分离,减少了日志记录代码的的重复编写,后期修改日志记录逻辑只用修改切面代码,提高了操作日志记录的可维护性,也避免了日志记录发生异常时影响业务接口,使用线程池插入日志记录还可以缩短接口响应时长。可以看到通过切面完成日志记录有这么多好处。

其实 RuoYi 中不仅仅只有日志记录使用了切面处理,像是日常开发中数据过滤权限、多数据源切换等也都使用了切面处理。使用切面可以让我们集中处理单一逻辑、方便增添关注点、减少重复代码、对控制层零侵入性以及提高可维护性

四、总结

本文目前从模块设计、操作日志记录等两个方面对 RuoYi 项目进行了讲解。如果大家也使用过 RuoYi 项目。

标签:

(责任编辑:news01)
全球资讯:周四4只新股申购(周四申购新股介绍)

全球资讯:周四4只新股申购(周四申购新股介绍)

周四4只新股申购(周四申购新股介绍),周四,共有4只新股可申购,为创业板光大同创、创业板森泰股份、上...
04-04 15:57:14
全球热讯:美白祛斑效果好的护肤品有哪些?口碑效果最好的几款,值得分享

全球热讯:美白祛斑效果好的护肤品有哪些?口碑效果最好的几款,值得分享

美白祛斑效果好的护肤品有哪些?想必想要美白提亮肌肤的姐妹们都想知道吧!美白功效护肤作为现在最热门...
04-04 15:18:51
4月4日日经225指数收盘上涨0.35%_世界资讯

4月4日日经225指数收盘上涨0.35%_世界资讯

每经AI快讯:北京时间4月4日14:00,日经225指数收盘上涨99 27点,涨幅为0 35%,报28287 42点。(
04-04 14:03:32
原神魈空/梦(原名得不到的爱)-当前独家

原神魈空/梦(原名得不到的爱)-当前独家

空无所事事的晃着红酒杯,嫣红的酒水映出了一副愁眉不展的面容。啧,难喝。空缓慢走到露天的阳台处,把...
04-04 13:15:43
书到用时方恨少下一句是什么(书到用时方恨少)

书到用时方恨少下一句是什么(书到用时方恨少)

书到用时方恨少下一句是什么,书到用时方恨少这个很多人还不知道,现在让我们一起来看看吧!1、书到用时...
04-04 12:04:47
福建暴雨4级预警!晋江天气要狂变

福建暴雨4级预警!晋江天气要狂变

福建暴雨4级预警!晋江天气要狂变
04-04 11:22:14
上海:2022年全市外贸进出口4.19万亿元 实际使用外资239.56亿美元

上海:2022年全市外贸进出口4.19万亿元 实际使用外资239.56亿美元

1月至2月,上海全市货物进出口6815 6亿元,在去年同期高基数、高增速的基础上增长0 7%;实际使用外资4...
04-04 10:31:07
最新消息:欧洲外交官:西方不急于揪出“北溪”爆炸真凶 宁愿假装看不见

最新消息:欧洲外交官:西方不急于揪出“北溪”爆炸真凶 宁愿假装看不见

今年2月8日,美国知名调查记者西摩·赫什发文爆料说,“北溪”管道系美国情报部门和美军人员秘密破坏
04-04 10:12:08
王兴减持理想汽车股权:套现超4亿港元 曾是李想的关键先生

王兴减持理想汽车股权:套现超4亿港元 曾是李想的关键先生

王兴减持理想汽车股权:套现超4亿港元曾是李想的关键先生,股权,出租车,电动车,理想汽车,c轮融资,李想(企...
04-04 09:15:16
世界头条:正式官宣 曼联和卢克肖续约至2024年

世界头条:正式官宣 曼联和卢克肖续约至2024年

据英超球队曼联官方消息,曼联左后卫卢克-肖已经与俱乐部签署了一份为期四年的新合同。曼联和卢克肖续约...
04-04 08:11:54
第三届中国国际消费品博览会将开幕 近30家世界500强或行业头部企业全球CEO线下参会

第三届中国国际消费品博览会将开幕 近30家世界500强或行业头部企业全球CEO线下参会

本届消博会将举办“消博风尚、首发首秀”发布会,预计将有300多个品牌发布1000多个新品,还将举办100余...
04-04 07:11:31
世界动态:ST高升(000971):控股股东天津百若克部分股份被解除冻结

世界动态:ST高升(000971):控股股东天津百若克部分股份被解除冻结

4月1日,ST高升公告显示,公司于近日披露了相关文件,近日收到天津百若克通知,天津百若克收到天津市河...
04-04 05:22:22
环球观焦点:4月3日基金净值:大成国企改革灵活配置混合最新净值3.249,跌0.55%

环球观焦点:4月3日基金净值:大成国企改革灵活配置混合最新净值3.249,跌0.55%

4月3日,大成国企改革灵活配置混合最新单位净值为3 249元,累计净值为3 249元,较前一交易日下跌0 55...
04-04 01:17:16
博敏电子: 博敏电子关于向特定对象发行股票发行情况的提示性公告 今日最新

博敏电子: 博敏电子关于向特定对象发行股票发行情况的提示性公告 今日最新

博敏电子:博敏电子关于向特定对象发行股票发行情况的提示性公告
04-03 22:16:48
天天报道:欧洲冠军杯外围赛是什么 欧洲冠军杯外围赛

天天报道:欧洲冠军杯外围赛是什么 欧洲冠军杯外围赛

1、FM2007里冠军杯赢一场应该是60万欧元外围赛不清楚没打过。相信通过欧洲冠军杯外围赛这篇文章能帮到你,
04-03 21:07:40
青少年攀岩参赛人数增多,赛事分级分类提上议事日程

青少年攀岩参赛人数增多,赛事分级分类提上议事日程

中国登山协会青少年委员会副秘书长余建新表示,今年还将举办6-7场全国性青少年攀岩赛事,其中的某一场参...
04-03 20:02:54
全球观热点:股市e览(艾迪西股吧)

全球观热点:股市e览(艾迪西股吧)

欧阳剑环数字化转型近来已成为多家银行推动转型的重要战略,线上化信贷技能成为银行组织提高小微借款服...
04-03 18:53:16
全球今日讯!外卖员送餐时间久是因为什么

全球今日讯!外卖员送餐时间久是因为什么

外卖员送餐时间久是因为这些,送员工,首先要了解对方的喜爱,兴趣等,这样才能有所表示,比如你想送礼...
04-03 18:20:47
世界今日讯!【中国联通积极推进成渝地区双城经济圈建设】系列报道之五:拥抱数字经济新蓝海 让5G应用“扬帆起航”

世界今日讯!【中国联通积极推进成渝地区双城经济圈建设】系列报道之五:拥抱数字经济新蓝海 让5G应用“扬帆起航”

【中国联通积极推进成渝地区双城经济圈建设】系列报道之五:拥抱数字经济新蓝海让5G应用“扬帆起航”,几...
04-03 17:51:52
安踏、一汽丰田、舒肤佳纷纷出手,更多企业撇清关系!曾年入6000万的张继科,栽了?|环球热文

安踏、一汽丰田、舒肤佳纷纷出手,更多企业撇清关系!曾年入6000万的张继科,栽了?|环球热文

安踏、一汽丰田、舒肤佳纷纷出手,更多企业撇清关系!曾年入6000万的张继科,栽了?
04-03 17:06:24
周星驰、刘亦菲等众星悼念坂本龙一 纪念他做出的贡献 焦点滚动

周星驰、刘亦菲等众星悼念坂本龙一 纪念他做出的贡献 焦点滚动

日本音乐家坂本龙一去世,周星驰、刘亦菲、于正、谭卓等明星发文悼念。
04-03 16:11:47
够省!够大!够劲!全新一代传祺GS3·影速贵阳上市! 环球微资讯

够省!够大!够劲!全新一代传祺GS3·影速贵阳上市! 环球微资讯

4月1日,全新一代传祺GS3·影速打破常规,以一场极具烟火气的上市发布会,在贵阳悦然时光正式上市。贵阳...
04-03 15:34:08
星黛露是哪个动画片_世界新动态

星黛露是哪个动画片_世界新动态

星黛露是哪个动画片,没有动画,是一个系列卡通人物形象。星黛露,米奇的玩偶迪士尼小熊达菲的好朋友之...
02-07 16:26:16
河南省级白名单房企正弘置业质押金基不动产8.5亿元股权予兴业银行_世界新消息

河南省级白名单房企正弘置业质押金基不动产8.5亿元股权予兴业银行_世界新消息

河南省级白名单房企正弘置业质押金基不动产8 5亿元股权予兴业银行,股权,租赁,持股,不动产,河南省,兴业...
02-07 14:13:57
深港陆路口岸全面恢复正常通关 不再实施出入境预约机制

深港陆路口岸全面恢复正常通关 不再实施出入境预约机制

新华社记者梁旭 摄本报深圳2月6日电(中青报·中青网记者武欣中)在经历1098天的等待后,从今天起,深...
02-07 12:37:36
闵行新增一家三级综合医院:上海市老年医学中心计划上半年试运行

闵行新增一家三级综合医院:上海市老年医学中心计划上半年试运行

闵行区又一家三级综合医院将于今年上半年试运行。东方网记者获悉,位于闵行区春申路2560号的上海市老年...
02-07 10:51:41
湘油泵:公司激光雷达电机的客户主要为部分激光雷达头部厂商

湘油泵:公司激光雷达电机的客户主要为部分激光雷达头部厂商

湘油泵(603319)02月07日在投资者关系平台上答复了投资者关心的问题。
02-07 09:21:51
纯白猫咪的名字大全_猫咪的名字大全

纯白猫咪的名字大全_猫咪的名字大全

1、打算给你想一俩个的结果一发不可收拾呵呵看看喜欢那个吧最好详细介绍下你的猫猫悠悠(yoyo)
02-07 07:56:12
艾叶的用途有哪些_艾叶的妙用方法

艾叶的用途有哪些_艾叶的妙用方法

养生之道网导读:艾叶在生活中是一种常见的药草,比如我们经常听到的艾灸,就是用到了艾叶。那么,艾叶...
02-07 04:40:01
当前热点-三大先生普鲁鲁

当前热点-三大先生普鲁鲁

1、《三大先生普鲁鲁》是2005年少年儿童出版社出版的图书。2、作者是史晓君。文章到此就分享结束,希望...
02-07 01:50:34

为您推荐

精彩推送