咕泡云商城-第一章项目搭建
项目介绍
咕泡云商城是基于SpringCloud Alibaba技术栈研发的B2C电商平台,平台拥有核心的电商业务功能。运营商在后台管理商品,前台能通过搜索引擎实时搜索到最新商品,用户注册后可以直接在平台购买商品,并通过微信支付实现线上支付。用户还能参与平台秒杀抢购,并实现线上支付秒杀商品
云商城架构设计
架构设计
架构设计如下图,将在后面的章节分别介绍。

工程搭建
环境准备
这里需要用到数据库 MySQL和注册中心 Nacos,数据库和注册中心我全部装到腾讯云服务器,用docker部署
- 安装mysql,注意需要倒对应的服务器运营商管理界面的防火墙中,放开3306端口,否则可能连不上
1
| docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxxxx mysql:5.7
|
- 安装nacos,同样需要放开8848端口,http://101.34.5.93:8848/nacos/#/login,账号密码都是nacos,注意jvm参数,nacos占用内存太大,如果是自己买的服务器内存大小不够,后面会出现微服务注册拒绝的情况。
1
| docker run -d -p 8848:8848 -e MODE=standalone -e JVM_XMS=256m -e JVM_XMX=256m -v /opt/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties -v /opt/nacos/logs:/home/nacos/logs --restart always --name nacos nacos/nacos-server
|

项目搭建
工程结构
我们可以按照功能分类,给每类工程创建一个父工程,所有的父工程都是一个pom项目,方便管理。
最外层在建一个统一的父工程做jar包,子工程管理。此处依然是pom项目,管理所有工程都需要的jar包,比如lombok所有的模块都可能是要使用日志,还有测试模块。
1 2 3 4 5
| mall-api:存储所有数据库表对应的Bean和Feign接口 mall-gateway:存储所有微服务网关 mall-service:存储所有微服务工程 mall-util:存储公共工程 mall-web:存储所有和页面渲染有关的工程
|

构建顶级父类工
构建顶级工程,作为pom项目,pom文件如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.1</version> <relativePath/> </parent> <groupId>com.chenghao.work</groupId> <artifactId>chenghaoshop</artifactId> <version>1.0.0-SNAPSHOT</version> <name>chenghaoshop</name> <description>咕泡云商城项目</description> <properties> <java.version>1.8</java.version> <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version> </properties>
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
|
构建各模块的父工程
- mall-api:存储所有数据库表对应的Bean和Feign接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>chenghaoshop</artifactId> <groupId>com.chenghao.work</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mall-api</artifactId> <packaging>pom</packaging> <description> 所有数据库表对应的Bean和Feign接口 </description> </project>
|
- mall-service:存储所有微服务工程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>chenghaoshop</artifactId> <groupId>com.chenghao.work</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mall-service</artifactId> <packaging>pom</packaging> <description> 所有微服务工程的父工程 </description> </project>
|
- mall-util:存储公共工程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>chenghaoshop</artifactId> <groupId>com.chenghao.work</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mall-util</artifactId> <packaging>pom</packaging> <description> 所有工具类的父工程 </description> </project>
|
- mall-web:存储所有和页面渲染有关的工程
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>chenghaoshop</artifactId> <groupId>com.chenghao.work</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mall-web</artifactId> <packaging>pom</packaging> <description>所有涉及页面渲染的父工程</description> </project>
|
- mall-gateway:存储所有微服务网关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>chenghaoshop</artifactId> <groupId>com.chenghao.work</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mall-gateway</artifactId> <packaging>pom</packaging> <description> 微服务网关父工程 </description> </project>
|
公共工程的搭建 mall-util中
1. 公共依赖包
service中以后要进行所有微服务工程的数据库操作,可以把所有service需要用到的包以及所有service需要初始化的对象放到一个独立的工程中,以后哪个工程要用,直接依赖即可。
在 mall-util中创建 mall-service-dependency,pom.xml依赖如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>chenghaoshop</artifactId> <groupId>com.chenghao.work</groupId> <version>1.0.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mall-service-dependency</artifactId> <description>所有微服务工程共同的依赖包</description>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> </project>
|
2.公共工具包
我们需要用到的工具包也可以单独放到一个工程中,每次要用,直接依赖即可。比如code,result,pageInfo
在 mall-util中创建 mall-common
定义项目错误码-部分代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
public enum RespCode {
SUCCESS(20000, "操作成功"),
ERROR(50000, "操作失败"),
SYSTEM_ERROR(50001, "系统错误");
private Integer code; private String message; }
|
定义返回结果-部分代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
@Data public class RespResult<T> implements Serializable {
private T data;
private Integer code;
private String message; }
|