在上一系列,对 RuoYi(若依)的单体项目比较简单地进行了探秘。虽然 RuoYi 的单体项目有很多缺乏,可是瑕不掩瑜,RuoYi 仍是一个在小项目、验证项目、紧急项目时,可用的基础结构项目。本系列将会品鉴一个更有意思的项目:pig

项目介绍

pig 项目分为前端项目和后端项目,在 GiteeGitHub 上都有保护,项目地址如下:

渠道 项目 地址
Gitee 前端 gitee.com/log4j/pig-u…
GitHub 前端 github.com/pig-mesh/pi…
Gitee 后端 gitee.com/log4j/pig
GitHub 后端 github.com/pig-mesh/pi…

咱们与 RuoYi 比照一下 StarForkWatch,因为 pig 是前后端分离的两个独立项目,所以咱们也进一步比照一下 RuoYi 的前后端分离的单体项目。

截止 2023.01.09,比照数据如下表:

渠道 项目 Star Fork Watch
Gitee RuoYi 34.1K 18.2K 5.3K
Gitee RuoYi-Vue 24.1K 16.4K 2.6K
Gitee pig-ui 2.2K 3.6K 384
Gitee pig 37.5K 11.4K 4.2K
GitHub RuoYi 3.4K 1.1K 68
GitHub RuoYi-Vue 1.4K 860 31
GitHub pig-ui 139 135 13
GitHub pig 4.3K 685 81

从比照表中能够看到,在数据上 pig 有稍微更高一些的热度,而且咱们能够从作者主页看到,pig 项目的作者还有很多其他的 Gitee GVP 项目,项目涉及规模更广。

一猪三吃,看看这个项目就够了(之一)

在文章开源界的卷王中,项目引荐中,咱们能够看到 pig 的引荐理由如下:

引荐理由
1.【作者】一位专心开源界的大佬,库房中有多个 GVP 项目证明了他的实力,该项目也在 Gitee 上登顶
2.【文档】文档、教育视频丰富,不少关键环节进行了细致的文档讲解,乃至供给了常见问题总结的 FAQ,文档地址
3.【运维】Docker 布置,一键布置作者都供给了解决方案
4.【整合才能】与优异的开源产品的融合度很高,供给了 jfinal、Ruoyi、Guns、renren、jeesite 等优异结构的接入
5.【分布式】因为项目选用微服务架构,结合文档你能够深化的体会服务注册、网关、负载均衡、限流、熔断、链路追踪、缓存、分布式事务等功用,让没有运用场景的同学背八股文的时分了解的更深入。
6.【代码】代码遵循《Alibaba Java 开发手册》(这条看着简单,可是其实很难,很多项目都是乱写的)
7.【项目依靠】核心依靠的版本一直与时俱进,选用核心组件的版本十分新,没有运用明显的具有缝隙的依靠
8.【前端】已支撑 Vue3,项目运用的 element-ui 也是在 Vue 领域应用最广泛的前端组件库

以上这些引荐点中,咱们能够看到,pig 项目不只代码十分规范,运用了微服务架构,乃至还能与 RuoYi 结合运用,扩展性仍是很强的。

看外观

一头好吃的猪,必定有一个美丽的外观。咱们先看看这头 pig 究竟长得怎么样。

下面咱们以 pig 的主线分支进行分析。

咱们先用 coding.net 对后端代码进行扫描,结果如下:

一猪三吃,看看这个项目就够了(之一)

全体评分略低于 RuoYi,警告问题远远小于 RuoYi,但提示问题比 RuoYi 多了一个数量级。其间,大量问题也是代码细节风格问题,但不像 RuoYi 运用的 C# 风格,pig 的风格仍是 Java 的。

运用 IDEA 打开后端项目今后,目录结构如下图:

一猪三吃,看看这个项目就够了(之一)

其间,db 目录包含数据库脚本以及 Docker 文件。

子项目目录为:

  • pig-auth:认证子项目。
  • pig-common:为项目相关的通用组件的子项目,包含 pig-common-bompig-common-corepig-common-datasource等。
  • pig-gateway:网关子项目。
  • pig-register:服务注册子项目(Nacos)。
  • pig-upms:办理体系子项目,包含 pig-upms-apipig-upms-biz
  • pig-visual:附加的一些可视化子项目,包含 pig-codegen(代码生成)、pig-monitor(监控)、pig-sentinel-dashboard(sentinel 大屏)、pig-xxl-job-admin(xxl-job 守时使命)。

从以上概览能够看出来,pig 作为后端项目,不是一个独立的单体应用,而是多个微服务一起组成的。

前端项目初看一下,能够看到 docker 目录,里边也有 Dockerfile,说明 pig-ui 也是官方支撑直接做成容器。因为我对前端涉猎不深,对 pig-ui 不作分析。

pig 项目的介绍中,咱们知道项目运用了 Spring BootSpring CloudSpring Security 等结构,后端拆分为了多个微服务,还供给了容器化支撑。也便是说,经过这一个项目,咱们就能够了解三个事情:基础结构项目的建立运转、微服务的拆分运转、容器化的布置运转。这便是经过 pig 这头猪,咱们能够学到三方面的常识,这便是“一猪三吃”。

运转后端

咱们先按官方文档,配置好运转依靠的环境,包含 JDKRedisMySQLNode.js 等。

咱们接着初始化相关的数据库,sql 文件存放于 db 文件夹中,咱们随意打开一个文件 pig.sql,如下图:

一猪三吃,看看这个项目就够了(之一)

咱们能够看到,pig 的 sql 文件中,建数据库和建数据表都选用了存在性断定,并且一切 sql 关键字都运用了大写风格,十分专业。

然后,咱们按文档配置注册中心项目 pig-register 的数据库衔接,配置文件示例如下图:

一猪三吃,看看这个项目就够了(之一)

能够看到,配置文件中运用了标准的“环境变量+默认值”的方法进行配置,点个赞,专业的看起来便是让人很舒畅。咱们不直接修正默认值,而是在相应的项目发动项中运用环境变量配置本地环境信息。

发动项目 pig-register 后,再按文档,在注册中心中,将 MySQL、Redis 等环境信息配置到相应的配置文件中。如下图:

一猪三吃,看看这个项目就够了(之一)

最终,按官方文档依次运转主要项目,IDEA 中的运转项目如下图所示:

一猪三吃,看看这个项目就够了(之一)

运转前端

后端项目运转成功后,咱们再按官方文档运转前端项目。按文档运用 npm 运转项目即可。

最终运转成功后,拜访 http://localhost:8080,能够看到如下界面:

一猪三吃,看看这个项目就够了(之一)

看界面

前后端项目运转成功后,咱们运用默认用户名 admin123456 登录进入体系,如下图:

一猪三吃,看看这个项目就够了(之一)

能够看到,pig 的全体界面十分简洁,或者说有点丑,可是像 RuoYi 一样,假如仅仅用于后台办理体系,也是足够用的。

菜单项,相同的挑选布局在左侧,这是现在比较常见的布局方法,咱们看一下菜单结构,大体如下:

顶级菜单包含:

  • 权限办理
  • 体系办理
  • 开发渠道
  • 服务监控
  • 体系官网

权限办理包含如下子菜单:

  • 用户办理
  • 菜单办理
  • 人物办理
  • 部分办理
  • 岗位办理

权限办理中主要是针对 RBAC 的办理功用,是一个体系最核心也最不可缺少的一部分。包含的仍是“用户——安排——人物”三驾马车,或许还有像 pig 中的非后台必需功用的“岗位办理”这类偏事务的功用。

体系办理包含如下子菜单:

  • 终端办理
  • 文件办理
  • 字典办理
  • 日志办理
  • 令牌办理
  • 参数办理

开发渠道包含如下子菜单:

  • 代码生成
  • 表单办理
  • 表单规划
  • 数据源办理

开发渠道整个功用依靠于项目 pig-codegen,也便是代码生成项目,假如没有运转代码生成项目,开发渠道相关功用是不可用的。

剩下的“服务监控”一级菜单,直接对接的便是 pig-monitor 监控项目,假如没有运转项目,相关界面直接无法打开。

界面全体规划上,右上角的部分可点击按钮,指向时是没有超链接的图标,这个在前端交互规划上是有问题的,需要改善。

而针对菜单来说,因为整个体系规划上是微服务架构,不同部分的菜单对应的或许是不同的服务,按当时这个状况看,假如部分服务没有运转,菜单功用便是不可用的。针对这个问题,假如全体体系胀大,功用更多了,咱们一般会有两种规划挑选。

一种规划是,当后端服务不可用时,由前端给出提示,如“某服务不可用”,而不是像当时规划一样直接将 “503” 反常在前端展示;

另一种规划是,完成一个菜单注册机制,不同服务初始化布置时,会向注册中心注册菜单数据,前端经过一个菜单接口获取当时可用的菜单项。

两种规划有各自的适用方向,有时乃至还会结合运用。特别是当微服务化下,后端服务和前端服务由多个开发部分或开发组进行时,选用一种规划来保证界面一致性是十分必要的。但就当时示例这个界面来说,项目还在必定规模以下,是不必考虑这个问题的,毕竟开发的实质是一个成本核算。

小结

本篇,咱们开始触摸了 pig 项目的前后端,了解到 pig 能够让咱们“一猪三吃”,并且开始运转起来了项目,看了下这只美丽的猪长什么样。

pig 项目的代码咱们还没有检查,但就从 sql 文件的风格来说,可重复执行性、关键字大写这些,十分专业,值得初学者或者需要提高的人学习。

下一篇,将展开对各模块的解构,本篇就到这儿,比心,❤。