黑马学成在线--项目环境搭建

这篇具有很好参考价值的文章主要介绍了黑马学成在线--项目环境搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 完整版请移步至我的个人博客查看:https://cyborg2077.github.io/

  • 学成在线–项目环境搭建

  • 学成在线–内容管理模块

  • 学成在线–媒资管理模块

  • 学成在线–课程发布模块

  • 学成在线–认证授权模块

  • 学成在线–选课学习模块

  • 学成在线–项目优化

  • Git仓库:https://github.com/Cyborg2077/xuecheng-plus

项目背景

在线教育市场环境

  • 以下内容摘自 https://report.iresearch.cn/content/2021/01/358854.shtml
  • 在线教育行业是一个有着极强的广度和深度的行业,从校内到校外;从早幼教到职业培训;从教育工具到全信息化平台等等。
    • 2020年的新冠疫情外生冲击,让在线教育再次站在聚光灯下。疫情下教育领域获融资最多,而其中在线教育最受资本青睐。据艾瑞咨询统计,2020年教育行业累计融资1164亿元,其中在线教育融资金额1034亿元,占比89%。与此同时,在行业处于困境的情况下,会加速洗牌,资源向好的企业集中。2020年资源向头部集中趋势明显,中小型机构生存更加困难。2020年资本向在线教育行业累计输送的1034亿元中,80%都流向了头部的5家公司。
  • To C市场
    • 据艾瑞咨询统计核算,2020年中国在线教育行业市场规模2573亿元,过去4年的CAGR达34.5%,其中低幼及素质教育赛道、K12学科培训赛道在线化进程加快是在线教育市场快速增长的最主要贡献因素。疫情影响下,低幼及素质教育领域的在线化范围持续纵深,职业教育领域的在线化进程也在不断加速,新的供给和需求不断产生。但同时,2020年疫情外生冲击加快了2020年的在线教育进程,将会透支一部分2021年的增速,艾瑞预计2021年在线教育行业同比增速将回落到20%左右。
      黑马学成在线--项目环境搭建
  • To B 市场
    • 疫情也加速了整个教育产业链的进化,to B机构快速成长起来,扮演着赋能者的角色,课程内容、招生、师训、直播系统、管理系统等产品及服务大量涌现。随着云服务发展成熟以及疫情对直播课需求的催化,大量提供直播授课系统等PaaS/SaaS服务的机构迅速成长起来,成为各种会展上的主力军。
      黑马学成在线--项目环境搭建

项目背景

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

  • 什么是B2B2C?

    • B2B2C是一种电子商务类型的网络购物商业模式,B是Business的简称,C是Consumer的简称,第一个B指的是商品或服务的供应商,第二个B指的是从事电子商务的企业,C则是表示消费者。
    • B2B的定义:企业跟企业之间的电子商务运作方式。
    • B2C的定义:企业跟消费者之间的电子商务运作方式。

项目介绍

项目介绍

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

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

  • 下图是项目的功能模块图:
    黑马学成在线--项目环境搭建

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

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

  • 下边介绍业务流程:

    1. 课程编辑与发布流程如下:
      黑马学成在线--项目环境搭建
    2. 课程发布后学生登录平台进行选课、在线学习。
      • 免费课程可直接学习,收费课程需要下单购买。
      • 学生选课流程如下:
        黑马学成在线--项目环境搭建

功能模块与演示

  • 本项目包括了用户端、机构端、运营端,核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。
    黑马学成在线--项目环境搭建

  • 本项目主要包括三类用户角色:学生、教学机构的老师、平台运营人员。

  • 主要讲解下边的业务流程:

    1. 教学机构的老师登录教学管理平台,编辑课程信息,发布自己的课程。
    2. 平台运营人员登录运营平台审核课程、视频等信息,审核通过后课程方可发布。
  • 课程编辑与发布流程如下:
    黑马学成在线--项目环境搭建

  • 课程发布后学生登录平台进行选课、在线学习。

  • 免费课程可直接学习,收费课程需要下单购买。

  • 学生选课流程如下
    黑马学成在线--项目环境搭建

面试

  • 详细说说你的项目吧
  • 从以下几个方面进行项目介绍:
    1. 项目的背景,包括:是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。
    2. 项目的业务流程
    3. 项目的功能模块
    4. 项目的技术架构
    5. 个人工作职责
    6. 个人负责模块的详细说明,包括模块的设计,所用到的技术,技术的实现方案等。

一个例子:
{% note info no-icon %}

  • 我最近参与的项目是我们公司自研的专门针对成人职业技能教育的网络课堂系统,网站提供了成人职业技能培训的相关课程,如:软件开发培训、职业资格证书培训、成人学历教育培训等课程。项目基于B2B2C的业务模式,培训机构可以在平台入驻、发布课程,我们公司作为运营方由专门的人员对发布的课程进行审核,审核通过后课程才可以发布成功,课程包括免费和收费两种形式,对于免费课程普通用户可以直接选课学习,对于收费课程在选课后需要支付成功才可以继续学习。
  • 本项目包括三个端:用户端(学生端)、机构端、运营端。
  • 核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。
  • 本项目采用前后端分离架构,后端采用SpringBoot、SpringCloud技术栈开发,数据库使用了MySQL,还使用的Redis、消息队列、分布式文件系统、Elasticsearch等中间件系统。
  • 划分的微服务包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务、 学习中心服务、系统管理服务、认证授权服务、网关服务、注册中心服务、配置中心服务等。
  • 我在这个项目中负责了内容管理、媒资管理、订单支付模块的设计与开发。
  • 内容管理模块,是对平台上的课程进行管理,课程的相关信息比较多这里在数据库设计了课程基本信息表、课程营销表、课程计划、课程师资表进行存储 ,培训机构要发布一门课程需要填写课程基本信息、课程营销信息、课程计划信息、课程师资信息,填写完毕后需要提交审核,由运营人员进行课程信息的审核,整个审核过程是程序自动审核加人工确认的方式,通常24小时审核完成。课程审核通过即可发布课程,课程的相关信息会聚合到课程发布表中,这里不仅要将课程信息写到课程发布表还要将课程信息写到索引库、分布式文件系统中,所以这里存在分布式事务的问题,项目使用本地消息表加任务调度的方式去解决这里的分布式事务,保存数据的最终一致性。
    {% endnote %}

项目技术架构

项目技术架构

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

项目技术栈

  • 学成在线按照技术分层的基础上,需要对主要层次使用具体的技术作说明。下面是学成在线技术栈结构图。
    黑马学成在线--项目环境搭建

项目开发环境搭建

项目工程搭建

工程结构关系

  • 学成在线使用 Maven 来进行项目的管理和构建。整个项目分为三大类工程:父工程、基础工程 和微服务工程
    黑马学成在线--项目环境搭建
  • 每一种类的工程都有不同的作用,下面是对其功能进行说明:
    • 父工程

      • 对依赖包的版本进行管理
      • 本身为Pom工程,对子工程进行聚合管理
    • 基础工程

      • 继承父类工程
      • 提供基础类库
      • 提供工具类库
    • 微服务工程

      • 分别从业务、技术方面划分模块,每个模块构建为一个微服务。
      • 每个微服务工程依赖基础工程,间接继承父工程。
      • 包括:内容管理服务、媒资管理服务、搜索服务、缓存服务、消息服务等。

构架父工程

  • 父工程的职责是对依赖包的版本进行管理
    1. 创建父工程,新建模块,选择Spring Initalizr,填写模块信息
      • 模块名:xuecheng-plus-parent
      • 包名:com.xuecheng
    2. 依赖管理定义
      • 父工程中没有代码,不用去依赖其他的包,它的作用就是限定其他子工程依赖包的版本号,即在dependencyManagement中去编辑即可
      • 确定父工程为一个pom工程,在pom.xml中添加如下内容
      <packaging>pom</packaging>
      
      • 确定项目所依赖的包及其版本号
      <properties>
          <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 l来限定所依赖包的版本。
      <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>
              <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>
              <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>
                  <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.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
                  <version>${spring-boot.version}</version>
              </plugin>
              <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.mapstruct</groupId>
                          <artifactId>mapstruct-processor</artifactId>
                          <version>${org.mapstruct.version}</version>
                          </path>-->
                          <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>
      

构建基础工程

  • 基础工程的职责是提供一些系统架构所需要的基础类库以及一些工具类库
    1. 创建基础工程
      • 模块名:xuecheng-plus-base
      • 包名:com.xuecheng
    2. 编辑pom.xml
      • 注意base的父工程是parent
      <?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>com.xuecheng</groupId>
              <artifactId>xuecheng-plus-parent</artifactId>
              <version>0.0.1-SNAPSHOT</version>
              <relativePath>../xuecheng-plus-parent</relativePath>
          </parent>
          <artifactId>xuecheng-plus-base</artifactId>
          <properties>
              <java.version>1.8</java.version>
          </properties>
          <dependencies>
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</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>org.apache.commons</groupId>
                  <artifactId>commons-lang3</artifactId>
              </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>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      
      </project>
      

添加.gitignore文件

  • 在项目工程的根目录(xuecheng-plus)新增.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/

项目数据库环境

  • MySQL版本要使用8.0以上,然后创建一个xc_content数据库
CREATE DATABASE xc_content
  • 之后导入课程提供好的建表sql语句即可

项目背景

在线教育市场环境

  • 以下内容摘自 https://report.iresearch.cn/content/2021/01/358854.shtml
  • 在线教育行业是一个有着极强的广度和深度的行业,从校内到校外;从早幼教到职业培训;从教育工具到全信息化平台等等。
  • 2020年的新冠疫情外生冲击,让在线教育再次站在聚光灯下。疫情下教育领域获融资最多,而其中在线教育最受资本青睐。据艾瑞咨询统计,2020年教育行业累计融资1164亿元,其中在线教育融资金额1034亿元,占比89%。与此同时,在行业处于困境的情况下,会加速洗牌,资源向好的企业集中。2020年资源向头部集中趋势明显,中小型机构生存更加困难。2020年资本向在线教育行业累计输送的1034亿元中,80%都流向了头部的5家公司。
  • To C市场
  • 据艾瑞咨询统计核算,2020年中国在线教育行业市场规模2573亿元,过去4年的CAGR达34.5%,其中低幼及素质教育赛道、K12学科培训赛道在线化进程加快是在线教育市场快速增长的最主要贡献因素。疫情影响下,低幼及素质教育领域的在线化范围持续纵深,职业教育领域的在线化进程也在不断加速,新的供给和需求不断产生。但同时,2020年疫情外生冲击加快了2020年的在线教育进程,将会透支一部分2021年的增速,艾瑞预计2021年在线教育行业同比增速将回落到20%左右。
黑马学成在线--项目环境搭建
  • To B 市场
  • 疫情也加速了整个教育产业链的进化,to B机构快速成长起来,扮演着赋能者的角色,课程内容、招生、师训、直播系统、管理系统等产品及服务大量涌现。随着云服务发展成熟以及疫情对直播课需求的催化,大量提供直播授课系统等PaaS/SaaS服务的机构迅速成长起来,成为各种会展上的主力军。

黑马学成在线--项目环境搭建

项目背景

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

  • 什么是B2B2C?

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

    • B2B的定义:企业跟企业之间的电子商务运作方式。

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

项目介绍

项目介绍

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

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

  • 下图是项目的功能模块图:

黑马学成在线--项目环境搭建

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

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

  • 下边介绍业务流程:

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

    黑马学成在线--项目环境搭建

    1. 课程发布后学生登录平台进行选课、在线学习。

      • 免费课程可直接学习,收费课程需要下单购买。

      • 学生选课流程如下:

      黑马学成在线--项目环境搭建

功能模块与演示

  • 本项目包括了用户端、机构端、运营端,核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。

黑马学成在线--项目环境搭建

  • 本项目主要包括三类用户角色:学生、教学机构的老师、平台运营人员。

  • 主要讲解下边的业务流程:

    1. 教学机构的老师登录教学管理平台,编辑课程信息,发布自己的课程。

    2. 平台运营人员登录运营平台审核课程、视频等信息,审核通过后课程方可发布。

  • 课程编辑与发布流程如下:

黑马学成在线--项目环境搭建

  • 课程发布后学生登录平台进行选课、在线学习。

  • 免费课程可直接学习,收费课程需要下单购买。

  • 学生选课流程如下

黑马学成在线--项目环境搭建

面试

  • 详细说说你的项目吧
  • 从以下几个方面进行项目介绍:
  1. 项目的背景,包括:是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。
  1. 项目的业务流程
  1. 项目的功能模块
  1. 项目的技术架构
  1. 个人工作职责
  1. 个人负责模块的详细说明,包括模块的设计,所用到的技术,技术的实现方案等。

一个例子:

{% note info no-icon %}

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

  • 本项目包括三个端:用户端(学生端)、机构端、运营端。

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

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

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

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

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

{% endnote %}

项目技术架构

项目技术架构

  • 学成在线项目采用当前流行的前后端分离架构开发,由以下流程来构成:用户层、CDN内容分发和加速、负载均衡、UI层、微服务层、数据层。

黑马学成在线--项目环境搭建

| 序号 | 名称 | 功能描述 |

| :–: | :------: | ---------------------------------------------------------- |

| 1 | 用户层 |   用户层描述了本系统所支持的用户类型包括:pc用户、app用户、h5用户。pc用户通过浏览器访问系统、app用户通过android、ios手机访问系统,H5用户通过h5页面访问系统。 |

| 2 | CDN |   CDN全称Content Delivery Network,即内容分发网络,本系统所有静态资源全部通过CDN加速来提高访问速度。
  系统静态资源包括:html页面、js文件、css文件、image图片、pdf和ppt及doc教学文档、video视频等。 |

| 3 | 负载均衡 |   系统的CDN层、UI层、服务层及数据层均设置了负载均衡服务,上图仅在UI层前边标注了负载均衡。 每一层的负载均衡会根据系统的需求来确定负载均衡器的类型,系统支持4层负载均衡+7层负载均衡结合的方式,4层负载均衡是指在网络传输层进行流程转发,根据IP和端口进行转发,7层负载均衡完成HTTP协议负载均衡及反向代理的功能,根据url进行请求转发。 |

| 4 | UI层 |   UI层描述了系统向pc用户、app用户、h5用户提供的产品界面。根据系统功能模块特点确定了UI层包括如下产品界面类型: 1)面向pc用户的门户系统、学习中心系统、教学管理系统、系统管理中心。 2)面向h5用户的门户系统、学习中心系统。 3)面向app用户的门户系统、学习中心系统。 |

| 5 | 微服务层 |   微服务层将系统服务分类三类:业务服务、基础服务、第三方代理服务。 业务服务:主要为学成在线核心业务提供服务,并与数据层进行交互获得数据。 基础服务:主要管理学成在线系统运行所需的配置、日志、任务调度、短信等系统级别的服务。 第三方代理服务:系统接入第三方服务完成业务的对接,例如认证、支付、视频点播/直播、用户认证和授权。 |

| 6 | 数据层 |   数据层描述了系统的数据存储的内容类型,**关系性数据库:**持久化的业务数据使用MySQL。 消息队列:存储系统服务间通信的消息,本身提供消息存取服务,与微服务层的系统服务连接。 **索引库:**存储课程信息的索引信息,本身提供索引维护及搜索的服务,与微服务层的系统服务连接。 **缓存:**作为系统的缓存服务,作为微服务的缓存数据便于查询。 **文件存储:**提供系统静态资源文件的分布式存储服务,文件存储服务器作为CDN服务器的数据来源,CDN上的静态资源将最终在文件存储服务器上保存多份。 |

  • 流程说明

    1. 用户可以通过pc、手机等客户端访问系统进行在线学习。

    2. 系统应用CDN技术,对一些图片、CSS、视频等资源从CDN调度访问。

    3. 所有的请求全部经过负载均衡器。

    4. 对于PC、H5等客户端请求,首先请求UI层,渲染用户界面。

    5. 客户端UI请求服务层获取进行具体的业务操作。

    6. 服务层将数据持久化到数据库。

项目技术栈

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

黑马学成在线--项目环境搭建

项目开发环境搭建

项目工程搭建

工程结构关系

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

黑马学成在线--项目环境搭建

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

    • 父工程

      • 对依赖包的版本进行管理

      • 本身为Pom工程,对子工程进行聚合管理

    • 基础工程

      • 继承父类工程

      • 提供基础类库

      • 提供工具类库

    • 微服务工程

      • 分别从业务、技术方面划分模块,每个模块构建为一个微服务。

      • 每个微服务工程依赖基础工程,间接继承父工程。

      • 包括:内容管理服务、媒资管理服务、搜索服务、缓存服务、消息服务等。

构架父工程

  • 父工程的职责是对依赖包的版本进行管理

    1. 创建父工程,新建模块,选择Spring Initalizr,填写模块信息

      • 模块名:xuecheng-plus-parent

      • 包名:com.xuecheng

    2. 依赖管理定义

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

      • 确定父工程为一个pom工程,在pom.xml中添加如下内容

      
      <packaging>pom</packaging>
      
      
      • 确定项目所依赖的包及其版本号
      
      <properties>
      
          <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 l来限定所依赖包的版本。
      
      <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>
      
              <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>
      
              <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>
      
                  <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.springframework.boot</groupId>
      
                  <artifactId>spring-boot-maven-plugin</artifactId>
      
                  <version>${spring-boot.version}</version>
      
              </plugin>
      
              <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.mapstruct</groupId>
      
                          <artifactId>mapstruct-processor</artifactId>
      
                          <version>${org.mapstruct.version}</version>
      
                          </path>-->
      
                          <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>
      
      

构建基础工程

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

    1. 创建基础工程

      • 模块名:xuecheng-plus-base

      • 包名:com.xuecheng

    2. 编辑pom.xml文章来源地址https://www.toymoban.com/news/detail-414377.html

      • 注意base的父工程是parent
      
      <?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>com.xuecheng</groupId>
      
              <artifactId>xuecheng-plus-parent</artifactId>
      
              <version>0.0.1-SNAPSHOT</version>
      
              <relativePath>../xuecheng-plus-parent</relativePath>
      
          </parent>
      
          <artifactId>xuecheng-plus-base</artifactId>
      
          <properties>
      
              <java.version>1.8</java.version>
      
          </properties>
      
          <dependencies>
      
              <dependency>
      
                  <groupId>org.projectlombok</groupId>
      
                  <artifactId>lombok</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>org.apache.commons</groupId>
      
                  <artifactId>commons-lang3</artifactId>
      
              </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>
      
      
      
          <build>
      
              <plugins>
      
                  <plugin>
      
                      <groupId>org.springframework.boot</groupId>
      
                      <artifactId>spring-boot-maven-plugin</artifactId>
      
                  </plugin>
      
              </plugins>
      
          </build>
      
      
      
      </project>
      
      

添加.gitignore文件

  • 在项目工程的根目录(xuecheng-plus)新增.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/

项目数据库环境

  • MySQL版本要使用8.0以上,然后创建一个xc_content数据库

CREATE DATABASE xc_content

  • 之后导入课程提供好的建表sql语句即可

到了这里,关于黑马学成在线--项目环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java笔记+踩坑汇总】Java基础+进阶+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+面试题汇总+源码

    本文是“Java学习路线”专栏的导航文章,目标是为Java工程师提供一套 完整的Java学习路线 。 目录 0.摘要/资料/代码整理 1.Java基础+进阶 2.MySQL,JavaWeb,Mybatis,前端 3.Git 4.SSM(Spring,SpringMVC,Mybatis)框架 5.Maven高级 6.Springboot,MybatisPlus,JPA框架 7.瑞吉外卖、Redis、Nginx、Linux、mysql主从复制

    2024年02月16日
    浏览(201)
  • 【前端实战小项目】学成在线网页制作

    网站根目录 是指存放网站的 第一层 文件夹,内部包含当前网站的 所有素材 ,包含HTML、CSS、图片、JavaScript等等。 项目文件夹(如study) images 文件夹:存放 固定使用 的图片素材,例如: logo、样式修饰图等等 uploads 文件夹:存放 非固定使用 的图片素材,例如:商品图、宣传图需要

    2024年02月21日
    浏览(35)
  • 微服务实战项目-学成在线-项目优化(redis缓存优化)

    视频播放页面用户未登录也可以访问,当用户观看试学课程时需要请求服务端查询数据,接口如下: 1、根据课程id查询课程信息。 2、根据文件id查询视频信息。 这些接口在用户未认证状态下也可以访问,如果接口的性能不高,当高并发到来很可能耗尽整个系统的资源,将整

    2024年02月12日
    浏览(37)
  • 微服务实战项目-学成在线-内容管理模块(有项目实战实现)

    1.1 什么是需求分析 在百度百科中对需求分析的定义如下: 需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从

    2024年02月13日
    浏览(68)
  • 学成在线项目开发技巧整理---第一部分

    视频项目链接: 学成在线 整理的是我个人认为偏生疏的知识点,不一定涉及的全面。 在系统中某些选项是几个特定的值的一个或多个,并且随着还可以动态添加。比如支付方式,配送方式等。 此时我们应该设计一个数据字典模块,在后台进行管理,然后前台要从后端查询。并

    2023年04月22日
    浏览(58)
  • 微服务实战项目-学成在线-媒资管理模块(有项目实战实现)

    1.1 模块介绍 媒资管理系统是每个在线教育平台所必须具备的,查阅百度百科对它的定义如下: 媒体资源管理(Media Asset Management,MAM)系统是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容(如视/音频资料、文本文件、图表等)进行数字化存储

    2024年02月11日
    浏览(57)
  • 学成在线第一天-课程内容管理服务搭建以及查询课程接口设计

    目录 一、搭建课程内容管理服务 二、设计接口 三、面试题 四、总结 没什么好说的,直接就是创建内容模块 然后这个继承父模块,然后再课程内容模块下面创建三个子模块,model、sevice、controller  model依赖base、service依赖model、controller依赖service 接口设计要考虑接口要考虑两

    2024年02月08日
    浏览(45)
  • 《学成在线》微服务实战项目实操笔记系列(P92~P120)【下】

    史上最详细《学成在线》项目实操笔记系列【下】,跟视频的每一P对应,全系列18万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。 4.1 (课程发布)模块需求 P92 课程预览:在发布课程之前需要预览一下,看最终的效果有没

    2024年02月19日
    浏览(45)
  • 【微服务 | 学成在线】项目易错重难点分析(媒资管理模块篇·上)

    媒资管理模块主要负责以下几件事情: 上传图片 上传视频 处理视频 对需要转码处理的视频系统会自动对其处理,处理后生成视频的URL 处理视频没有用户界面,完全是后台自动执行 审核媒资 分为自动审核和人工审核 可调用第三方鉴别接口协助审核 绑定媒资 课程计划创建好

    2024年02月06日
    浏览(50)
  • 学成在线----day8

    为了提高网站的速度需要将课程信息进行缓存,并且要将课程信息加入索引库方便搜索,下图显示了课程发布后课程信息的流转情况: 1、向内容管理数据库的课程发布表存储课程发布信息,更新课程基本信息表中发布状态为已发布。 2、向Redis存储课程缓存信息。 3、向Elas

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包