1-4 云商城项目工程搭建

1-4 云商城项目工程搭建

 接下来我们就来搭建下云商城的项目工程结构。

1、工程结构划分

  因为我们搭建的是微服务项目,所以整体的项目结构会非常的零散。虽然零散但是程序的复用性会非常高,所以首先在划分的时候我们可以将相关的业务服务放置在一个工程结构下。

在这里插入图片描述

  然后就是整个系统会使用到的依赖包、加载类及相关的普通工具包等我们也可以放置在一个util工程下

在这里插入图片描述

  还有就是相关的业务微服务会有很多的JavaBean(API)是需要复用到的,还有就是feign接口等像这些我们也可以放置在同一个工程中。

在这里插入图片描述

  还有一个比较重要的模块是微服务网关模块,这个我们也需要单独的放置

在这里插入图片描述

  以上的模块我们都是基于Restful风格的方式进行通信,商城系统我们还需要涉及到页面渲染的部分,这部分我们也同样单独的来放置

在这里插入图片描述

  最后我们将以上的微服务都放置在同一个父工程中,该父工程负责子工程、jar的管理工作

在这里插入图片描述

  当然这种结构并不是唯一的,只要大家觉得合理的搭配都是可以的哦。

2、项目结构搭建

  接下来我们就具体的来搭建相关的工程结构

2.1 顶级父工程搭建

 我们单独来构建这个项目,顶级父工程我们通过SpringBoot的在线模板来构建。步骤如下:

在这里插入图片描述

设置系统相关的参数

在这里插入图片描述

  相关的依赖选择

在这里插入图片描述

  需要注意的是这部分我们可以什么都不选择,我们可以在后面具体使用的时候需要用都什么就选择什么即可,但是要注意SpringCloud Alibaba相关的依赖对SpringBoot的版本是有要求的,必须是在2.2到2.3之间的版本,但是上面最低的版本是2.3.7那么我们在创建完成后再修改下版本即可。

在这里插入图片描述

  因为创建的是父工程,所以src目录没有必要,同时项目的类型应该是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 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.bobo.vip.mall</groupId>
	<artifactId>bobo-vip-mall</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>bobo-vip-mall</name>
	<packaging>pom</packaging>
	<description>商城系统</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>
		<!-- 单元测试 -->
		<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.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">
    <parent>
        <artifactId>bobo-vip-mall</artifactId>
        <groupId>com.bobo.vip.mall</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mall-api</artifactId>
    <packaging>pom</packaging>
    <description>
        存放所有JavaBean和Feign接口
    </description>

</project>

 安装上面的步骤创建对应的其他几个模块的父工程。

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">
    <parent>
        <artifactId>bobo-vip-mall</artifactId>
        <groupId>com.bobo.vip.mall</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mall-gateway</artifactId>
    <packaging>pom</packaging>
    <description>
        存放微服网关集群
    </description>

</project>
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">
    <parent>
        <artifactId>bobo-vip-mall</artifactId>
        <groupId>com.bobo.vip.mall</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <packaging>pom</packaging>
    <artifactId>mall-service</artifactId>
    <description>所有的应用服务</description>


</project>
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">
    <parent>
        <artifactId>bobo-vip-mall</artifactId>
        <groupId>com.bobo.vip.mall</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <packaging>pom</packaging>
    <artifactId>mall-util</artifactId>
    <description>
        存放所有公共工程
    </description>


</project>
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">
    <parent>
        <artifactId>bobo-vip-mall</artifactId>
        <groupId>com.bobo.vip.mall</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <packaging>pom</packaging>
    <artifactId>mall-web</artifactId>
    <description>
        存放所有和页面渲染有关的工程,不建议放在service中,所有service只提供基于RESTful的服务
    </description>


</project>

创建好的目录结构:
在这里插入图片描述

2.3 公共工程搭建

公共依赖汇总

  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>com.bobo.vip.mall</groupId>
        <version>1.0-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>
公共工具包

我们需要用到的工具包也可以单独放到一个工程中,每次要用,直接依赖即可。

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<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;
    }
}

依赖管理

  service工程一定会依赖mall-service-dependencymall-common,我们可以修改mall-service将这两个工程添加到依赖中:

<dependencies>
    <!--依赖mall-service-dependency-->
    <dependency>
        <groupId>com.bobo.vip.mall</groupId>
        <artifactId>mall-service-dependency</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <!--依赖mall-common-->
    <dependency>
        <groupId>com.bobo.vip.mall</groupId>
        <artifactId>mall-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

在这里插入图片描述

整体的目录结构就创建到此咯~下篇我们开始具体的业务实现了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波波烤鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值