test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-devtools
runtime
true
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
2.2 各个模块父工程搭建
我们可以按照功能分类,给每类工程创建一个父工程,方便管理。
mall-api:存储所有数据库表对应的Bean和Feign接口
mall-gateway:存储所有微服务网关
mall-service:存储所有微服务工程
mall-util:存储公共工程
mall-web:存储所有和页面渲染有关的工程
mall-api
创建模块工程的时候我们只创建一个普通的maven工程即可。
相关属性设置
因为mall-api也是个父工程,所以packaging也设置为pom类型
pom文件的内容
<?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”>
bobo-vip-mall
com.bobo.vip.mall
1.0-SNAPSHOT
4.0.0
mall-api
pom
存放所有JavaBean和Feign接口
安装上面的步骤创建对应的其他几个模块的父工程。
mall-gateway
网关模块的父工程
对应的pom文件内容
<?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”>
bobo-vip-mall
com.bobo.vip.mall
1.0-SNAPSHOT
4.0.0
mall-gateway
pom
存放微服网关集群
mall-service
pom文件的内容
<?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”>
bobo-vip-mall
com.bobo.vip.mall
1.0-SNAPSHOT
4.0.0
pom
mall-service
所有的应用服务
mall-util
对应的pom文件中的内容
<?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”>
bobo-vip-mall
com.bobo.vip.mall
1.0-SNAPSHOT
4.0.0
pom
mall-util
存放所有公共工程
mall-web
对应的pom文件的内容
<?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”>
bobo-vip-mall
com.bobo.vip.mall
1.0-SNAPSHOT
4.0.0
pom
mall-web
存放所有和页面渲染有关的工程,不建议放在service中,所有service只提供基于RESTful的服务
创建好的目录结构:
2.3 公共工程搭建
公共依赖汇总
service中以后要创建微服务工程操作数据库,我们可以把所有service需要用到的包以及所有service需要初始化的对象放到一个独立的工程中,以后哪个工程要用,直接依赖即可。
在mall-util
中创建mall-service-dependency
,pom.xml依赖如下:
<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”>
mall-util</a
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
rtifactId>
com.bobo.vip.mall
1.0-SNAPSHOT
4.0.0
mall-service-dependency
所有service工程依赖的包汇总以及初始化工具包
org.springframework.boot
spring-boot-starter-web
com.baomidou
mybatis-plus-boot-starter
3.3.2
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-data-redis
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
公共工具包
我们需要用到的工具包也可以单独放到一个工程中,每次要用,直接依赖即可。
在mall-util
中创建mall-common
,我们在工程中创建2个对象:
用于指定响应状态码的枚举对象:com.bobo.mall.util.RespCode
package com.bobo.mall.util;
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.bobo.mall.util.RespResult
package com.bobo.mall.util;
import java.io.Serializable;
public class RespResult 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);