然后熟悉Java项目结构
一、整体结构
1.1、结构解读
项目整体结构如下:
/smart-admin-api/
|-- sa-admin/ 【springboot项目】是admin端的业务逻辑,最终以springboot 启动
|-- sa-base/ 【jar项目】是通用的类和业务逻辑,最终以jar形式,被sa-admin或者其他项目使用
|-- pom.xml 【pom.xml文件】父级pom.xml文件,定义共用依赖、模块、多环境profile
1.2、优秀的扩展性
如果将来 smart-admin要做一个app端的话,只需要加一个 sa-app
的项目就可以了,其中sa-app
只完成app
端的项目业务逻辑接口,如下:
/smart-admin-api
|-- sa-admin/
|-- sa-base/
|-- sa-app/
最终会运行两个java进程:
- sa-admin 进程,满足 后管的业务api
- sa-app 进程,满足 移动端的业务api
如果再加一个 数据大屏的话,可以再加一个项目sa-data
项目,用于提供数据大屏的接口。
二、maven多模块
目录smart-admin-api
使用的是 maven多模块 项目
- 即最顶层有一个
parent
的/smart-admin-api/pom.xml
文件 - 在
/smart-admin-api/pom.xml
文件中定义所有依赖和依赖的版本号,具体如下:
2.1、定义parent
<groupId>net.1024lab</groupId>
<artifactId>sa-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
2.2、定义多模块 moudle
<modules>
<module>sa-base</module>
<module>sa-admin</module>
</modules>
2.3、提取依赖版本
<properties>
<java.version>1.8</java.version>
<springboot.version>2.7.5</springboot.version>
<spring-mock.version>2.0.8</spring-mock.version>
....
....
</properties>
2.4、定义多环境profile
<profiles>
<!--开发环境,即 默认环境-->
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<!--预发布环境-->
<profile>
<id>pre</id>
<properties>
<profiles.active>pre</profiles.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>
三、sa-base项目讲解
3.1、 base的初衷
如果你接触过多模块,肯定听过类似于base
、common
的字样,那么sa-base
项目也是同理,来存放一些通用的类;本项目中 sa-base
主要有如下四个作用:
- 1) 通用的无状态的类,如:javabean对象、常量、异常、枚举、错误码、工具类、序列化类等等
- 2) 通用的配置,如:mybatis、心跳、数据库、http、环境变量、reload、重复提交 等等配置
- 3) 通用支撑类的业务逻辑,如:缓存、文件上传、验证码、数据字典、操作记录、token、序列号、加密 等等
- 4) 全局的常量维护,如:redis key前缀、错误码范围、url前缀 等等
3.2、yaml文件
很多人觉得对于base类的项目都是jar,没有配置文件,但是在 smart-admin中,里面还有个配置文件是为什么?
根本原因 因为 sa-base
中提供了以上 四类的功能都需要配置,而且这些配置 在 其他项目中还可能一样;比如:
- 数据库地址,各个项目连接的都是一个数据库
- oss配置, 各个项目也是一个通知
- redis 配置,也是一样的等等
- 等等还有其他
所以:
在base项目中,加入了 sa-base.yaml
配置文件,并使用YamlProcessor
类将sa-base.yaml
的配置注入到了,其他引用sa-base
的项目中。
感兴趣的小伙伴可以研究下YamlProcessor
这个类。
3.3、common 通用类
通用类在sa-base
项目中的 net.lab1024.sa.base.common
包,具体作用如下:
/common
|--- annoation 通用注解,如@NoNeedLogin
|--- code 返回错误码,ErrorCode`
|--- constatnt 通用的常量
|--- controller 父类BaseController
|--- domain 通用javabean,如返回对象RequestDTO,分页PageResult等
|--- enumeration 全局枚举接口,BaseEnum,配合前端的 vue-enum
|--- exception 通用自定义异常,如业务异常等
|--- json 通用的 json 序列化、反序列化,如文件、字典等
|--- swagger 通用的swagger类,配合后端的BaseEnum和前端的vue-enum
|--- util 通用工具类(本项目虽使用hutool,但是还有一些独有的工具类)
|--- validator 表单校验,配合 BaseEnum的枚举校验 @CheckEnum
3.4、base 配置类
配置类在sa-base
项目中的 net.lab1024.sa.base.config
包,具体作用如下:
/config
|--- AsyncConfig 异步注解@Async的线程池配置
|--- CorsFilterConfig 跨域请求配置
|--- DataSourceConfig 数据库连接池druid配置
|--- FileCloudConfig 文件OSS配置
|--- HeartBeatConfig 心跳配置
|--- MvcConfig MVC配置
|--- RedisConfig redis配置
|--- RepeatSubmitConfig 重复提交配置
|--- ScheduleConfig 定时任务配置
|--- SystemEnvironmentConfig 运行时环境配置
3.5、base 支撑类
支撑类在sa-base
项目中的 net.lab1024.sa.base.module.support
包,起到**“支撑”**作用;
- 基础功能:系统配置、字典、文件上传和下载、缓存cache 等
- 日志功能:心跳日志、登录日志、操作日志、数据变动日志等
- 校验功能:接口加密解密、防止重复提交、图形验证码等
- 通用功能:表格自定义列、订单号生成等
- 其他等
以上功能其实是 任何行业、任何系统 都所需要的一些基础功能,所以起了个名字,叫做:support
,起到支撑的作用,同时也放到了 sa-base
包中,以便各个项目使用。
四、sa-admin 项目讲解
4.1、理解admin
sa-admin项目是具体的 后台管理的业务代码项目,目录结构 符合 Java代码规范 V3 。
sa-admin项目中包含了 一个后管所常见的功能,比如:员工、部门、角色、权限、菜单
等,同时也加入了一些其他功能,比如OA的 企业信息、通知公告
等等
4.2、config包
sa-admin
项目中,config包下只有三个类,为什么这么少呢,是因为引入了 sa-base
,在sa-base
项目中的config
包有很多默认的配置,都引入了进来。
4.3、constant包
此包是sa-admin
项目独有的常量类,比如 AdminRedisKeyConst
是admin项目独有的redis的key;
4.4、重点module包
在module
中,具体拆成了两个包,一个是 business,业务包;另外一个是system 系统包; 具体理解:
将任何后管的系统工程拆成了两类:
- 第一类是
员工、部门、角色、权限、菜单
等等,这类是系统必须有的,定义为system
- 第二类是具体的业务,比如你是进销存系统,采购、入库、销售等,这种属于业务,定义为
business
根据这两类划分,所以有了以上的两个子包,一个system
,一个business
;
如果你在做一个进销存ERP系统,在搭建完smart-admin
后,可以直接在business
包中进行业务编码;结构如下:
module/
|---business 业务模块
|---|----goods 商品管理
|---|----|------GoodsController 商品controller
|---|----|------GoodsService 商品service
|---|----|------GoodsDao
|---|----order 订单管理
|---|----|------OrderController 订单controller
|---|----|------OrderService
|---system 系统模块
|---|----department 部门管理
|---|----employee 员工管理
|---|----role 角色管理
4.5、重点yaml配置
在上面中讲解了 sa-base
的sa-base.yaml
配置文件,会自动注入到其他项目中,所以如果sa-base.yaml
中的配置满足了sa-admin
项目的需求,我就不用任何配置。
那么对于sa-admin
中独有的配置,比如端口号,那么只需要配置下端口好就可以了,比如在 application.yaml
配置文件中,我配置了sa-admin
的进程端口为 1024
server:
servlet:
context-path: '/'
port: 1024
# swagger文档
swagger:
host: localhost:${server.port}
tag-class: net.lab1024.sa.admin.constant.AdminSwaggerTagConst
以上会覆盖掉 sa-base.yaml
中对应的配置。
联系我们
- 教育领域(高职院校数字化、就业创业大数据平台、继续教育平台;在线教育系统、视频直播、题库等,包含:医学、应急管理、成考、专升本等)
- 供应链领域(网络货运平台、大宗贸易进销存ERP、物流管理TMS、B2B电商、仓储WMS、AI提效等)
- 中医领域(诊所数字化管理、互联网医院、AI辅助诊疗、中医适宜技术、在线云问诊、空中药房等)
- AI+软件领域(软件定制外包、开源技术、数据大屏、国产化改造、技术升级换代、人员外包、技术顾问、技术培训等)
加微信: 卓大 拉你入群,一起学习 | 公众号 :六边形工程师 分享:赚钱、代码、生活 | 请 “1024创新实验室” 烩面里加肉 咖啡配胡辣汤,提神又饱腹 | 抖音 : 六边形工程师 直播:赚钱、代码、中医 |