mall-swarm架构篇介绍
mall-swarm架构篇介绍
在我们平时做项目的时候,项目中使用的技术往往是最重要的,尤其是用于搭建框架的技术,因为这些技术可以复用到任何同类项目中去。下面我们就来学习下《mall-swarm微服务学习教程》的架构篇,主要是带大家搭建一个mall-swarm项目在使用的项目脚手架
mall-swarm-tiny
,这个过程精简掉了mall-swarm项目中的电商业务,纯粹学习mall-swarm项目中使用的技术。希望大家通过架构篇的学习,能独立搭建一个通用的微服务项目脚手架!
脚手架技术栈
由于微服务脚手架是从mall-tiny
脚手架升级而来的,所以我们先来了解下mall-tiny
脚手架的技术栈。
mall-swarm-tiny
脚手架在mall-tiny
脚手架的基础上,还添加了如下技术和微服务解决方案。
脚手架整合过程
在我们把这些微服务技术整合到mall-swarm-tiny
脚手架中去时,我们会采用先学习需要整合的技术(Spring Cloud相关技术我们已经在组件篇中学习过了),然后再进行整合的方式,比如SpringDoc、Knife4j、Sa-Token和Spring Boot Admin我们都会先学习下,再整合到脚手架里去。
mall-swarm-tiny
脚手架整合过程如下:
下载源码
mall-swarm-arch
为《mall-swarm微服务学习教程》中架构篇的示例代码,直接去Github上下载即可,下载地址:https://github.com/macrozheng/mall-swarm-arch
创建数据库
在运行项目前,我们得先导入数据库,确保安装好MySQL
,这里使用的是5.7
版本。
需要导入的SQL脚本在mall-swarm-arch
项目的document/sql
目录下,文件名称为mall_tiny.sql
。
我们得先创建mall_tiny
数据库,然后导入数据,导入成功后数据库结构如下:
导入示例代码
由于mall-swarm-arch
项目为一个聚合项目,所以在导入代码时需要整个导入,不能单独导入某个示例。
使用IDEA,直接选择项目的根目录进行导入。
项目结构
- 导入成功后项目结构如下:
- 项目结构说明如下:
mall-swarm-arch
├── mall-swarm-tiny -- 一个基于Spring Cloud的微服务项目脚手架
├── mall-swarm-tiny-01 -- mall-tiny项目拆分为多模块
├── mall-swarm-tiny-02 -- mall-swarm-tiny项目集成注册中心和网关
├── mall-swarm-tiny-03 -- mall-swarm-tiny项目整合Knife4j实现网关聚合文档
├── mall-swarm-tiny-04 -- mall-swarm-tiny整合Sa-Token实现认证授权功能
├── mall-swarm-tiny-05 -- mall-swarm-tiny整合Admin实现微服务监控
├── mall-tiny -- 一个基于Spring Boot的脚手架项目,精简掉了项目中的电商业务,保留了基本的项目骨架
└── mall-tiny-template -- 一个基于Spring Boot的模版项目,创建子模块时可以直接拷贝
- 然后设置下项目的JDK版本,这里使用
Java 17
版本;
- 由于
mall-swarm-tiny
的各个步骤对应的代码中,模块名称会重名,所以我们在使用mall-swarm-tiny-x
代码时,最好只导入其中之一,例如我们现在想导入mall-swarm-tiny-01
代码时,需要先unlink
当前导入的mall-swarm-tiny
模块;
- 然后导入需要使用的
mall-swarm-tiny-01
模块;
- 由于
mall-swarm-arch
示例代码项目采用了父工程统一管理依赖版本的方式,我们在根目录的pom.xml
中定义好了所有示例使用的依赖版本;
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<skipTests>true</skipTests>
<docker.host>http://192.168.3.101:2375</docker.host>
<spring-boot.version>3.2.2</spring-boot.version>
<spring-boot-admin.version>3.2.2</spring-boot-admin.version>
<spring-cloud.version>2023.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
<hutool.version>5.8.16</hutool.version>
<knife4j.version>4.5.0</knife4j.version>
<springdoc-openapi.version>2.3.0</springdoc-openapi.version>
<druid.version>1.2.21</druid.version>
<pagehelper-spring-boot-starter.version>2.1.0</pagehelper-spring-boot-starter.version>
<mybatis-spring-boot-starter.version>3.0.3</mybatis-spring-boot-starter.version>
<mybatis-generator.version>1.4.2</mybatis-generator.version>
<mysql-connector.version>8.0.28</mysql-connector.version>
<minio.version>8.4.5</minio.version>
<jjwt.version>0.9.1</jjwt.version>
<jaxb-api.version>2.3.1</jaxb-api.version>
<pagehelper.version>6.1.0</pagehelper.version>
<sa-token.version>1.37.0</sa-token.version>
</properties>
- 然后在各个子模块的
pom.xml
中只需继承父项目;
<parent>
<groupId>com.macro.mall</groupId>
<artifactId>mall-swarm-arch</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
- 然后在子模块中只需直接引用父项目中的依赖版本即可,这一点大家需要注意下。
<!--MyBatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper-starter.version}</version>
</dependency>