前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1-4 云商城项目工程搭建

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

作者头像
用户4919348
发布2021-01-14 15:04:08
7520
发布2021-01-14 15:04:08
举报
文章被收录于专栏:波波烤鸭波波烤鸭

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类型。然后添加的依赖应该是整个项目所有模块都会使用到的。所以设置如下:

代码语言:javascript
复制
<?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 各个模块父工程搭建

我们可以按照功能分类,给每类工程创建一个父工程,方便管理。

代码语言:javascript
复制
mall-api:存储所有数据库表对应的Bean和Feign接口
mall-gateway:存储所有微服务网关
mall-service:存储所有微服务工程
mall-util:存储公共工程
mall-web:存储所有和页面渲染有关的工程
mall-api

  创建模块工程的时候我们只创建一个普通的maven工程即可。

在这里插入图片描述
在这里插入图片描述

相关属性设置

在这里插入图片描述
在这里插入图片描述

  因为mall-api也是个父工程,所以packaging也设置为pom类型

在这里插入图片描述
在这里插入图片描述

pom文件的内容

代码语言:javascript
复制
<?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文件内容

代码语言:javascript
复制
<?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文件的内容

代码语言:javascript
复制
<?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文件中的内容

代码语言:javascript
复制
<?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文件的内容

代码语言:javascript
复制
<?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依赖如下:

代码语言:javascript
复制
<?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

代码语言:javascript
复制
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

代码语言:javascript
复制
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将这两个工程添加到依赖中:

代码语言:javascript
复制
<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>
在这里插入图片描述
在这里插入图片描述

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1-4 云商城项目工程搭建
    • 1、工程结构划分
      • 2、项目结构搭建
        • 2.1 顶级父工程搭建
        • 2.2 各个模块父工程搭建
        • 2.3 公共工程搭建
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档