学成在线-项目介绍&环境搭建

特别感谢黑马程序员提供的免费的优质的课程

写在前边

学习的第一个微服务项目,希望可以通过这个项目学习到一些东西,并且试着用文字记录所学

学成在线视频链接

项目背景

在线教育市场环境

以下内容摘自https://report.iresearch.cn/content/2021/01/358854.shtml

在线教育行业是一个有着极强的广度和深度的行业,从校内到校外;从早幼教到职业培训;从教育工具到全信息化平台等等。

2020年的新冠疫情外生冲击,让在线教育再次站在聚光灯下。疫情下教育领域获融资最多,而其中在线教育最受资本青睐。据艾瑞咨询统计,2020年教育行业累计融资1164亿元,其中在线教育融资金额1034亿元,占比89%。与此同时,在行业处于困境的情况下,会加速洗牌,资源向好的企业集中。2020年资源向头部集中趋势明显,中小型机构生存更加困难。2020年资本向在线教育行业累计输送的1034亿元中,80%都流向了头部的5家公司。

To C市场

C(Consumer)面向消费者市场

据艾瑞咨询统计核算,2020年中国在线教育行业市场规模2573亿元,过去4年的CAGR达34.5%,其中低幼及素质教育赛道、K12学科培训赛道在线化进程加快是在线教育市场快速增长的最主要贡献因素。疫情影响下,低幼及素质教育领域的在线化范围持续纵深,职业教育领域的在线化进程也在不断加速,新的供给和需求不断产生。但同时,2020年疫情外生冲击加快了2020年的在线教育进程,将会透支一部分2021年的增速,艾瑞预计2021年在线教育行业同比增速将回落到20%左右。

image-20230505173703428

To B市场

B(Business)面向企业

疫情也加速了整个教育产业链的进化,to B机构快速成长起来,扮演着赋能者的角色,课程内容、招生、师训、直播系统、管理系统等产品及服务大量涌现。随着云服务发展成熟以及疫情对直播课需求的催化,大量提供直播授课系统等PaaS/SaaS服务的机构迅速成长起来,成为各种会展上的主力军。

image-20230505173845878

IT培训市场规模

中国IT人才供给报告(https://new.qq.com/rain/a/20210831A01JI600)

IT人才总体供不应求,高中低人才分别占比8%、41%、51%,详见下图:

image-20230505173916278

IT服务是贯穿IT应用系统全生命周期的各项服务的统称,下图是IT服务产品图谱,本项目属于IT培训产业。

image-20230505173942170

下图是IT培训市场规模:

image-20230505174006435

学成在线项目背景

软件总体分为两类:系统软件和应用软件,应用软件包括:运营类、管理类、工具类等,运营类的项目由运营商按照企业的商业模式去运营,比如:外卖项目、滴滴打车、在线教育等;管理类的项目是为某个组织完成某业务的数据及业务管理,比如:医院MIS(管理信息系统--Management Information System)系统,ERP系统(ERP全称是Enterprise Resource Planning,其中文名字为企业资源计划,这个系统是针对物资资源管理,人力资源管理,财务资源管理,信息资源管理集成一体化的一个企业管理系统。)等;工具类的项目是为了某个领域完成具体的需求,比如:数据采集系统、文件处理系统等。

学成在线项目属于运营类的项目,运营类项目的研发可能是自研也可能是外包,自研是由运营商成立软件研发部门自己进行软件研发,运营商即是甲方也是乙方,外包则是由运营商外包给第三方软件公司进行研发,运营商是甲方,软件公司是乙方。

学成在线项目是本公司自研的一个专门针对成人职业技能教育的网络课堂系统,网站提供了成人职业技能培训的相关课程,如:软件开发培训、职业资格证书培训、成人学历教育培训等课程。项目基于B2B2C的业务模式,培训机构可以在平台入驻、发布课程,运营人员对发布的课程进行审核,审核通过后课程才可以发布成功,课程包括免费和收费两种形式,对于免费课程可以直接选课学习,对于收费课程在选课后需要支付成功才可以继续学习。

什么是B2B2C?

B2B2C是一种电子商务类型的网络购物商业模式,B是Business的简称,C是Consumer的简称,第一个B指的是商品或服务的供应商,第二个B指的是从事电子商务的企业,C则是表示消费者。

B2B的定义:企业跟企业之间的电子商务运作方式。
B2C的定义:企业跟消费者之间的电子商务运作方式。

用腾讯课堂为例子来说,第一个B就是腾讯公司,运营这个项目。第二个B就是在腾讯课堂中发布课程的其他企业。C就是在腾讯课堂上学习的用户。

项目介绍

分别从业务技术两个方式介绍项目。

项目业务介绍

本项目包括了用户端、机构端、运营端。

核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。

下图是项目的功能模块图

image-20230505174500189

业务流程

  1. 课程编辑与发布流程如下:

    image-20230505174625518

  2. 课程发布后学生登录平台进行选课、在线学习。免费课程可直接学习,收费课程需要下单购买。学生选课流程如下:

    image-20230505174758440

项目技术架构

本项目采用前后端分离架构,后端采用SpringBoot、SpringCloud技术栈开发,数据库使用了MySQL,还使用的Redis、消息队列、分布式文件系统、Elasticsearch等中间件系统。

划分的微服务包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务、 学习中心服务、系统管理服务、认证授权服务、网关服务、naos(注册中心服务、配置中心服务)等。

项目的技术架构图

image-20230505174942923

各层职责说明如下:

名称 功能描述
用户层 用户层描述了本系统所支持的用户类型包括:pc用户、app用户、h5用户。pc用户通过浏览器访问系统、app用户通过android、ios手机访问系统,H5用户通过h5页面访问系统。
CDN CDN全称Content Delivery Network,即内容分发网络,本系统所有静态资源全部通过CDN加速来提高访问速度。系统静态资源包括:html页面、js文件、css文件、image图片、pdf和ppt及doc教学文档、video视频等。
负载均衡 系统的CDN层、UI层、服务层及数据层均设置了负载均衡服务,上图仅在UI层前边标注了负载均衡。 每一层的负载均衡会根据系统的需求来确定负载均衡器的类型,系统支持4层负载均衡+7层负载均衡结合的方式,4层负载均衡是指在网络传输层进行流程转发,根据IP和端口进行转发,7层负载均衡完成HTTP协议负载均衡及反向代理的功能,根据url进行请求转发。
UI层 UI层描述了系统向pc用户、app用户、h5用户提供的产品界面。根据系统功能模块特点确定了UI层包括如下产品界面类型: 1)面向pc用户的门户系统、学习中心系统、教学管理系统、系统管理中心。 2)面向h5用户的门户系统、学习中心系统。 3)面向app用户的门户系统、学习中心系统。
微服务层 微服务层将系统服务分类三类:业务服务、基础服务、第三方代理服务。 业务服务:主要为学成在线核心业务提供服务,并与数据层进行交互获得数据。 基础服务:主要管理学成在线系统运行所需的配置、日志、任务调度、短信等系统级别的服务。 第三方代理服务:系统接入第三方服务完成业务的对接,例如认证、支付、视频点播/直播、用户认证和授权。
数据层 数据层描述了系统的数据存储的内容类型,关系性数据库:持久化的业务数据使用MySQL。 消息队列:存储系统服务间通信的消息,本身提供消息存取服务,与微服务层的系统服务连接。 索引库:存储课程信息的索引信息,本身提供索引维护及搜索的服务,与微服务层的系统服务连接。 缓存:作为系统的缓存服务,作为微服务的缓存数据便于查询。 文件存储:提供系统静态资源文件的分布式存储服务,文件存储服务器作为CDN服务器的数据来源,CDN上的静态资源将最终在文件存储服务器上保存多份。

流程说明

  1. 用户可以通过pc、手机登客户端访问系统进行在线学习
  2. 系统应用CDN技术,对一些图片、CSS、视频等资源从CDN调度访问
  3. 所有的请求全部经过负载均衡器
  4. 对于PC、H5等客户端请求,首先请求UI层,渲染用户界面
  5. 客户端UI请求服务层获取进行具体的业务操作
  6. 服务层将数据持久化到数据库

项目技术栈

学成在线按照技术分层的基础上,需要对主要层次使用具体的技术作说明。下面是学成在线技术栈结构图。

img

项目演示

项目演示就对照着上边描述过的业务流程脑补一下吧

面试

介绍下你的这个项目?

在面对这个问题的时候,要从以下几个方面进行回答

  • 项目的背景,包括:是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。
  • 项目的业务流程(简要概述)
  • 项目的功能模块
  • 项目的技术架构
  • 个人工作职责
  • 个人负责模块的详细说明,包括模块的设计,所用到的技术,技术的实现方案等。

以本项目为例子

项目背景和业务流程

我最近参与的项目是我们公司自研的专门针对成人职业技能教育的网络课堂系统,网站提供了成人职业技能培训的相关课程,如:软件开发培训、职业资格证书培训、成人学历教育培训等课程。项目基于B2B2C的业务模式,培训机构可以在平台入驻、发布课程,我们公司作为运营方由专门的人员对发布的课程进行审核,审核通过后课程才可以发布成功,课程包括免费和收费两种形式,对于免费课程普通用户可以直接选课学习,对于收费课程在选课后需要支付成功才可以继续学习。

项目的功能模块

本项目包括用户端、机构端、运营端三个端。

核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。

项目的技术架构

本项目采用前后端分离架构,后端采用SpringBoot、SpringCloud技术栈开发,数据库使用了MySQL,还使用的Redis、消息队列、分布式文件系统、Elasticsearch等中间件系统。

划分的微服务包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务、 学习中心服务、系统管理服务、认证授权服务、网关服务、注册中心服务、配置中心服务等。

个人负责模块的详细说明

我在这个项目中负责了内容管理、媒资管理、订单支付模块的设计与开发。

内容管理模块,是对平台上的课程进行管理,课程的相关信息比较多这里在数据库设计了课程基本信息表、课程营销表、课程计划、课程师资表进行存储 ,培训机构要发布一门课程需要填写课程基本信息、课程营销信息、课程计划信息、课程师资信息,填写完毕后需要提交审核,由运营人员进行课程信息的审核,整个审核过程是程序自动审核加人工确认的方式,通常24小时审核完成。课程审核通过即可发布课程,课程的相关信息会聚合到课程发布表中,这里不仅要将课程信息写到课程发布表还要将课程信息写到索引库、分布式文件系统中,所以这里存在分布式事务的问题,项目使用本地消息表加任务调度的方式去解决这里的分布式事务,保存数据的最终一致性。

环境搭建

借此次机会也将通过这个项目学到的maven知识记录下来

基础工程搭建

工程结构关系

学成在线使用 Maven 来进行项目的管理和构建。整个项目分为三大类工程:父工程基础工程微服务工程

工程的结构如下图所示

image-20230505190052718

每一种类的工程都有不同的作用,下面是对其功能进行说明:

  • 父工程
    • 依赖包的版本进行管理
    • 本身为pom工程,对子工程进行聚合管理
  • 基础工程
    • 继承父类工程
    • 提供基础类库
    • 提供工具类库
    • ...
  • 微服务工程
    • 分别从业务、技术方面划分模块,每个模块构建为一个微服务。
    • 每个微服务工程依赖基础工程,间接继承父工程。
    • 微服务包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务等。

构建父工程

依赖管理定义

父工程中没有代码,不用去依赖其它的包,它的作用是限定其它子工程依赖包的版本号,即在dependencyManagement 中去编辑即可。

在maven工程中,父工程有以下两个特点

  1. 父工程中除了pom.xml没有其他文件
  2. 父工程中的pom.xml中要有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>
    <groupId>com.xuecheng</groupId>    // 公司、机构、组织名称的逆写,子工程也会继承
    <artifactId>xuecheng-plus-parent</artifactId>  // 模块名称
    <version>0.0.1-SNAPSHOT</version>  // 版本,一旦父工程版本号确定到了,那么子工程也就确定了
    <name>xuecheng-plus-parent</name>
    <description>xuecheng-plus-parent</description>
    <packaging>pom</packaging>   // 表示打包方式为pom,父工程必须有
	
    // 对依赖的版本号进行管理
    <properties>
        // <java.version>命名的方式一般都是artifactId.version(如果artifactId比较短的话)
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
        <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
        <org.projectlombok.version>1.18.8</org.projectlombok.version>
        <javax.servlet-api.version>4.0.1</javax.servlet-api.version>
        <fastjson.version>1.2.83</fastjson.version>
        <druid-spring-boot-starter.version>1.2.8</druid-spring-boot-starter.version>
        <mysql-connector-java.version>8.0.30</mysql-connector-java.version>
        <mybatis-plus-boot-starter.version>3.4.1</mybatis-plus-boot-starter.version>
        <commons-lang.version>2.6</commons-lang.version>
        <minio.version>8.4.3</minio.version>
        <xxl-job-core.version>2.3.1</xxl-job-core.version>
        <swagger-annotations.version>1.5.20</swagger-annotations.version>
        <commons-lang3.version>3.10</commons-lang3.version>
        <okhttp.version>4.8.1</okhttp.version>
        <swagger-spring-boot-starter.version>1.9.0.RELEASE</swagger-spring-boot-starter.version>
        <elasticsearch.version>7.12.1</elasticsearch.version>
    </properties>

	
    // 对依赖进行管理,如果没有<dependencyManagement>这个标签的话,子工程会继承父工程pom文件下引入的所有的jar包,有了这个标签相当于对整个项目的依赖的版本号进行了管理
    <dependencyManagement>
        <dependencies>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            // Spring Cloud 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>
            <!-- lombok,简化类的构建-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${org.projectlombok.version}</version>
            </dependency>
            <!-- mapstruct 代码生成器,简化java bean之间的映射 -->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-jdk8</artifactId>
                <version>${org.mapstruct.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${org.mapstruct.version}</version>
            </dependency>
            // swagger文档,要在api层进行swagger的配置,可以用@Api等相关注解进行标注
            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${swagger-annotations.version}</version>
            </dependency>
            <!-- Servlet 容器管理 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${javax.servlet-api.version}</version>
                <scope>provided</scope>
            </dependency>
            <!-- fastjson ,json解析工具 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <!-- 数据库 druid 连接池管理 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid-spring-boot-starter.version}</version>
            </dependency>

            <!-- mySQL数据库驱动包管理 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
            <!-- mybatis plus 集成Spring Boot启动器 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus-boot-starter.version}</version>
            </dependency>

            <!-- mybatis plus 代码生成器 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>${mybatis-plus-boot-starter.version}</version>
            </dependency>

            <!-- 工具类管理 -->
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>${commons-lang.version}</version>
            </dependency>
            <!-- 分布式文件系统 minIO的客户端API包 -->
            <dependency>
                <groupId>io.minio</groupId>
                <artifactId>minio</artifactId>
                <version>${minio.version}</version>
            </dependency>
            <!--google推荐的一套工具类库-->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>25.0-jre</version>
            </dependency>
            <!--分布式任务调度-->
            <dependency>
                <groupId>com.xuxueli</groupId>
                <artifactId>xxl-job-core</artifactId>
                <version>${xxl-job-core.version}</version>
            </dependency>
            <!--Spring boot单元测试-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring-boot.version}</version>
                <scope>test</scope>
                // exclusion表示将当前依赖所有的依赖从当前依赖中排除掉
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>${okhttp.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>com.spring4all</groupId>
                <artifactId>swagger-spring-boot-starter</artifactId>
                <version>${swagger-spring-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
        </dependencies>

    </dependencyManagement>

    <build>
        <finalName>${project.name}</finalName>
        <!--编译打包过虑配置-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!--指定项目源码jdk的版本-->
                    <source>1.8</source>
                    <!--指定项目编译后的jdk的版本-->
                    <target>1.8</target>
                    <!--配置注解预编译-->
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${org.projectlombok.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>

            <!--责处理项目资源文件并拷贝到输出目录,如果有额外的资源文件目录则需要配置-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <encoding>utf-8</encoding>
                    <!--使用默认分隔符,resource中可以使用分割符定义过虑的路径-->
                    <useDefaultDelimiters>true</useDefaultDelimiters>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

构建基础工程

基础工程的职责是提供一些系统架构所需要的基础类库以及一此工具类库。

xuecheng-plus-base的父工程为xuecheng-plus-parent

xuecheng-plus-base的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>
    // 子工程要想继承父工程,必须有的标签,里边多了个属性就是<relativePath>表示,从当前pom文件出发,怎样找到父工程的pom文件
    <parent>
        <groupId>com.xuecheng</groupId>
        <artifactId>xuecheng-plus-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../xuecheng-plus-parent</relativePath>
    </parent>

	// 因为是从父工程继承过来的,所以就不用写<groupId>和<version>,必须和父工程保持一致
    <artifactId>xuecheng-plus-base</artifactId>
	
    // 其他的模块是引入了base这个模块,那么,在base中定义的依赖都会自动加入到其他模块中
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            // version也不用定义,会使用父工程中的properties下的版本号
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <!-- fast Json -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>

        <!-- servlet Api 依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- 通用组件 -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.11</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!--根据扩展名取mimetype-->
        <dependency>
            <groupId>com.j256.simplemagic</groupId>
            <artifactId>simplemagic</artifactId>
            <version>1.17</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.3</version>
        </dependency>

        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-parameter-names</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jdk8</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
        </dependency>
    </dependencies>
</project>

父工程文件组成

image-20230505193945082

base工程文件组成

image-20230505194013095

gitignore文件

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
logs/
### VS Code ###
.vscode/

本项目模块的依赖关系

模块的分类:parent:依赖管理

微服务:content、auth、checkcode等等

再每一个微服务下都包含了三个子模块:api、service、model

微服务模块继承parent、微服务的子模块直接继承微服务,相当于间接的继承了parent。

api依赖service,servce依赖model,model依赖base

大致的流程图如下图所示

模块关系

posted @ 2023-05-05 19:44  Sstarry  阅读(438)  评论(0)    收藏  举报