携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
1.工程结构分析
大致分为以上这些服务模块,接下来创建对应的工程
1.父工程搭建
工程坐标
<groupId>com.xz</groupId>
<artifactId>xz-mall</artifactId>
<version>0.0.1-SNAPSHOT</version>
使用Spring Initializr创建父工程。
整理下pom.xml,在pom.xml中只留部分包,其他包是创建微服务时需要。
<?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>2.2.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xz</groupId>
<artifactId>xz-mall</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>xz-mall</name>
<!--父工程-->
<packaging>pom</packaging>
<description>SpringCloud Alibaba 云商城</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<!--lombok,方便创建Bean对象和日志操作-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--Test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--热部署插件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--alibaba-->
<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>
</plugin>
</plugins>
</build>
</project>
2.子项目父工程创建
可以按照上面的功能进行分类创建,给每类工程创建一个父工程,方便管理
mall-api:存储所有数据库表对应的Bean和Feign接口
mall-gateway:存储所有微服务网关
mall-service:存储所有微服务工程
mall-util:存储公共工程
mall-web:存储所有和页面渲染有关的工程
mall-api的pom.xml:
<?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>xz-mall</artifactId>
<groupId>com.xz</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>mall-api</artifactId>
<description>
存放所有JavaBean和Feign接口
</description>
</project>
mall-gateway的pom.xml
<?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>xz-mall</artifactId>
<groupId>com.xz</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>mall-gateway</artifactId>
<description>
存放微服网关集群
</description>
</project>
mall-service的pom.xml
<?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>xz-mall</artifactId>
<groupId>xz.mall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>mall-service</artifactId>
<description>所有的应用服务</description>
</project>
mall-util的pom.xml
<?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>xz-mall</artifactId>
<groupId>xz.mall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>mall-util</artifactId>
<description>
存放所有公共工程
</description>
</project>
mall-web的pom.xml
<?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>xz-mall</artifactId>
<groupId>xz.mall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>mall-web</artifactId>
<description>
存放所有和页面渲染有关的工程,不建议放在service中,所有service只提供基于RESTful的服务
</description>
</project>
3.公共工程创建
3.1公共依赖汇总
service中以后要创建微服务工程操作数据库,我们可以把所有service需要用到的包以及所有service需要初始化的对象放到一个独立的工程中,以后哪个工程要用,直接依赖即可。
在mall-util中创建mall-service-dependency,pom.xml依赖如下:
<?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>mall-util</artifactId>
<groupId>xz.mall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mall-service-dependency</artifactId>
<description>
所有service工程依赖的包汇总以及初始化工具包
</description>
<dependencies>
<!--web包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MyBatis Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Nacos-->
<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>
3.2公共工具包
需要用到的工具包也可以单独放到一个工程中,每次要用,直接依赖即可。
在mall-util中创建mall-common,在工程中创建2个对象:
用于指定响应状态码的枚举对象:com.xz.mall.util.RespCode.java
public enum RespCode {
SUCCESS(20000, "操作成功"),
ERROR(50000, "操作失败"),
SYSTEM_ERROR(50001, "系统错误");
private Integer code;
private String message;
RespCode(Integer code, String message) {
this.code = code;
this.message = message;
}
RespCode() {
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
用于响应用户信息封装的对象: com.xz.mall.util.RespResult.java
public class RespResult<T> implements Serializable {
//响应数据结果集
private T data;
/**
* 状态码
* 20000 操作成功
* 50000 操作失败
*/
private Integer code;
/***
* 响应信息
*/
private String message;
public RespResult() {
}
public RespResult(RespCode resultCode) {
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
}
public RespResult(T data, RespCode resultCode) {
this.data = data;
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
}
public static RespResult ok() {
return new RespResult(null, RespCode.SUCCESS);
}
public static RespResult ok(Object data) {
return new RespResult(data, RespCode.SUCCESS);
}
public static RespResult error() {
return new RespResult(null, RespCode.ERROR);
}
public static RespResult error(String message) {
return secByError(RespCode.ERROR.getCode(),message);
}
//自定义异常
public static RespResult secByError(Integer code,String message) {
RespResult err = new RespResult();
err.setCode(code);
err.setMessage(message);
return err;
}
public static RespResult error(RespCode resultCode) {
return new RespResult(resultCode);
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
3.3依赖管理
service工程一定会依赖mall-service-dependency和mall-common,可以修改mall-service将这两个工程添加到依赖中:
<dependencies>
<!--依赖mall-service-dependency-->
<dependency>
<groupId>com.xz</groupId>
<artifactId>mall-service-dependency</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--依赖mall-common-->
<dependency>
<groupId>com.xz</groupId>
<artifactId>mall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
总结:本篇主要讲述了父工程搭建和子项目父工程创建,还有公共工程创建。