08-Java项目企业级微服务实战《学成在线》

黑马程序员Java项目企业级微服务实战《学成在线》,基于SpringCloud、SpringCloudAlibaba技术栈开发,项目搭建到选课支付学习全通关

1.视频URL:https://www.bilibili.com/video/BV1j8411N7Bm?p=60&spm_id_from=pageDriver&vd_source=b145378dc4a63e7f1ee72b34a3e543fb

2.《学成在线》环境搭建

在springboot工程中
1.数据库,视频用的是虚拟机环境搭建的,本人用的是docker
2.前端工程,后端工程
3.涉及的springboot微服务架构
-nacos(注册中心);视频用的是虚拟机环境搭建的,是否可用docker

 

项目的介绍:从业务和技术两方面来谈。

缓存?

一.Java Spring Boot 的目录结构对于项目的组织和管理非常重要。


 它遵循一套约定,提供了一种标准的方式来组织代码、配置文件和资源文件。以下是 Java Spring Boot 目录结构的一般规范:

src/main/java: 主要包含项目的Java源代码文件,按照包的结构进行组织。这里是放置业务逻辑和其他Java类的主要位置。
src/main/resources: 主要包含项目的配置文件和资源文件,按照资源的类型进行组织。其中包括application.properties或application.yml文件,用于配置应用程序的属性和参数。
src/test/java: 包含项目的测试源代码文件,按照包的结构进行组织。这里是放置单元测试和集成测试的主要位置。
src/test/resources: 包含项目的测试配置文件和测试资源文件,按照资源的类型进行组织。这里是放置测试用例数据和其他测试相关文件的主要位置。
pom.xml: Maven项目的配置文件,包含了项目的依赖管理和构建配置。通过配置pom.xml文件,可以定义项目的依赖关系、插件和构建过程。
target: 项目的构建输出目录,包含编译后的类文件、打包后的可执行文件和其他生成的文件。这里是构建和部署的目标位置。

除了上述常见的目录外,根据具体项目的需求和结构,还可以添加其他自定义目录,例如:
config: 包含自定义的配置文件,用于覆盖默认的配置文件。可以根据实际需要添加各种环境的配置文件,如application-dev.properties、application-prod.properties等。
controller: 包含控制器类,用于处理请求和响应。这里是放置Spring MVC框架中的控制器类的主要位置。
service: 包含业务逻辑的服务类,用于处理具体的业务操作。这里是放置业务逻辑代码的主要位置。
repository: 包含数据访问的接口和类,用于与数据库进行交互。这里是放置数据访问代码的主要位置。
entity: 包含实体类,用于表示数据模型和数据结构。这里是放置实体类的主要位置。

二.类与文件的补充说明


 0.开发的过程

1.API包中,前后端,controller类(前后端联调时,接口文档要提供设计好)

 2.Service包中,

2.1分布插件与mapper扫描

1> 扫描的目的:生成mapper接口的代理对象,放在spring容器中

2>方法上的@Bean要生效,类上要加@Configuration

2.2配置文件bootstrap.yml

2.2分布插件的原理

一切的开始,都要从启动类上的@SpringBootApplication注解开始
启动类上边的@SpringBootApplication是 注解应用启动的入口类,它自动开启了许多有用的特性,如自动配置、组件扫描、筹划配置类等,从而减少了开发人员的配置工作量。@SpringBootApplication是Spring Boot启动类上的核心注解,是一个组合注解
他主要组合了以下3个注解:
@SpringBootConfiguration:表明被注解的类是一个配置类,用于定义应用程序的配置信息。
@EnableAutoConfiguration:开启自动配置功能。
@ComponentScan:启用组件扫描,使得Spring能够自动发现和装配一些组件
 3.前后端联调

三.以分类举例运用


1.controller

-返回json树型数据(数据类型:列表),一级分类中嵌套二级分类

-controller:根据前端定义的接口参数,组装方法入参(入参也可能是dto);出参(对于的mapper/dto之前,有dto就无mapper)

-VO:前端有不同的入参,针对controller同一个方法(VO可省略,直接提供service(dto)给前端调用)

2.mapper及mapper.xml(思路:树型数据,要用递归的sql语句)

-po与数据表字段一一对应(可以用工具生成)

-mapper,sql语句对应的方法,加入递归的方法(可以用工具生成)

-mapper.xml,sql语句,加入递归的sql语句(可以用工具生成)

-dto一般继承了mapper,在模拟类mapper基础上,增加了返回前端接口需要返回的字段

3.service(参数合法校验不要放在controller+业务逻辑) 

-java8的方法需要加强运用

-接口与实现

4.前端

 

四.新增课程


1.数据模型,这两部分信息分别在course_basecourse_market两张表存储(当点击保存按钮时向这两张表插入数据。这两张表是一对一关联关系。)

-新建课程的初始审核状态为未提交、初始发布状态为未发布

-生成课程基本信息、课程营销信息的POMapper文件 (Remark:PO不满足时会增加DTO类,此DTO继续了PO;同时返回的数据是多层数据结构时,Mapper要增加新的sql查询方法和mapper.xml中会增加sql语句)

2.接口定义 

-接口协议 HTTP POSTContent-Typeapplication/json 

-根据接口定义内容,请求参数相比 CourseBase模型类不一致,需要在dto包下自定义,模型类从课程资料/工程目录获取 

Java
@ApiOperation("新增课程基础信息")
@PostMapping("/course")
public CourseBaseInfoDto createCourseBase(@RequestBody AddCourseDto addCourseDto){
    return null;
//机构id,由于认证系统没有上线暂时硬编码

    Long companyId = 1232141425L;

    return courseBaseInfoService.createCourseBase(companyId,addCourseDto);

}

 3.接口开发(先mapper->service->controller)

根据需求分析,新增课程表单中包括了”课程基本信息、课程营销信息“,需要分别向课程基本信息表、课程营销表保证数据。

3.1首先定义service接口,

/**
  * @description 添加课程基本信息
  * @param companyId  教学机构id
  * @param addCourseDto  课程基本信息
  * @return com.xuecheng.content.model.dto.CourseBaseInfoDto
  * @author Mr.M
  * @date 2022/9/7 17:51
 */
CourseBaseInfoDto createCourseBase(Long companyId,AddCourseDto addCourseDto);

 3.2编写service接口实现类,实现向课程”课程基本信息、课程营销信息“保存数据:(难点)

-接口中的数据,”课程基本信息、课程营销信息“表中没有

-(1)首先要做接口基本数据校验

~把前端传入的数据进行copy【//将填写的课程信息赋值给新增对象  BeanUtils.copyProperties(dto,courseBaseNew);】

~另外增加如下接口中没有的值

//保存课程营销信息
//根据id从课程营销表查询
//根据课程id查询课程基本信息,包括基本信息和营销信息

-(2)封装数据

-(3)更新数库

4.接口测试

-首先去完善controller方法:

-使用httpclient测试(controller调用)

-前后端联调 

五.异常问题分析


1.在service中的校验

1.1.在service方法中有很多的参数合法性校验,当参数不合法则抛出异常

1.2.系统未知异常

1.定义一些通用的异常信息,CommonError类(系统未知异常)
2.自定义异常类型,在base工程com.xuecheng.base.execption下自定义异常类。
3.响应用户的统一类型
4.全局异常处理器
从 Spring 3.0 - Spring 3.2 版本之间,对 Spring 架构和 SpringMVC 的Controller 的异常捕获提供了相应的异常处理。
•@ExceptionHandler:Spring3.0提供的标识在方法上或类上的注解,用来表明方法的处理异常类型。
•@ControllerAdvice:Spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强,        在项目中来增强SpringMVC中的Controller。通常和@ExceptionHandler 结合使用,来处理SpringMVC的异常信息。
•@ResponseStatus:Spring3.0提供的标识在方法上或类上的注解,用状态代码和应返回的原因标记方法或异常类。

 

 2.前端请求后端接口传输参数,是在controller中校验还是在Service中校验?

Contoller

-校验请求参数的合法性,包括:必填项校验,数据格式校验,比如:是否是符合一定的日期格式,等。

-则可以将校验的代码写成通用代码。

Service

-要校验的是业务规则相关的内容,比如:课程已经审核通过所以提交失败。

-根据业务规则去校验不方便写成通用代码。

3.controller中统一校验实现框架JSR303校验(javax.validation.constraints

1.模拟类的字段上:上边用到了@NotEmpty和@Size两个注解,@NotEmpty表示属性不能为空,@Size表示限制属性内容的长短。
2.方法上:定义好校验规则还需要开启校验,在controller方法中添加@Validated注解,
3.如果校验出错Spring会抛出MethodArgumentNotValidException异常,我们需要在统一异常处理器中捕获异常,解析出异常信息。
4.分组校验,同个接口用一个模型类(用于新增,修改,删除同一表单数据)

 

七.需要扩充的知识点


 1.Swagger相当于文档的作用,用于前后端接口定义一致

-在idea中的配置

-注解的运用

2.httpclient是idea自带的自测接口工具

-在idea中的配置

 -要有一个专门的java工程用来测试,可进行单元测试(mapper,service,controller),数据可反复利用

3.前端跨域

-跨域的定义

4.数据库

-除了常规的CRUD,还有什么其他的sql语句运用

-数据字典表概念

5.Java知识点

-java8

-@springboot注解

-启动类 

-java配置类,与配置文件.xml

-多服务互相调用

-job原理

-listen原理

6.异常问题分析

-service方法中有很多的参数合法性校验,当参数不合法则抛出异常

7.debug(调试)

 

第二大模块


 

1.管理后台
  1.1服务治理与配置(注册与发现):Nacos
  1.2运维:git部署,Jenkins,Docker容器化部署,K8S弹性伸缩
2.服务网关:Getway,用于:域名,这样不受环境限制
3.网关负载均衡:Nginx
4.微服务
  4.1分布式任务调试:XXL-Job
  4.2单元测试:http-client(idea自带插件)
  4.3媒资服务
  4.4前端服务
  4.5sdk工具包
5.技术中台
  5.1分布式事务:
    -本地事务:使用本服务的数据库存来控制事务
    -分布式事务:多个服务用网络来完成一个事务
  5.2模板引擎
  5.3页面静态化(Nginx)
  5.4远程调用(关键字:熔断,降级,微服务雪崩):feign
6.基础设施
  6.1mysql集群
  6.2Redis集群
  6.3ElasticSearch集群
  6.4阿里云存储OSS
7.运维后台,监控后台
  7.1运维监控安全:认证授权中心OAuth2.0
  7.2服务监控:sentinel熔断保护
  7.3elk日志

 

 

 一.注册中心(nacos)与配置中心与网关(gateway)

Spring Cloud :一套规范
Spring Cloud alibaba: nacos服务注册中心,配置中心

 1.注册中心

在搭建Nacos服务发现中心之前需要搞清楚两个概念:namespace和group
namespace:用于区分环境、比如:开发环境、测试环境、生产环境。
group:用于区分项目,比如:xuecheng-plus项目、xuecheng2.0项目、分类

 1.1搭建环境 

2.网关

3.配置中心

 

二.媒资处理


 1.分布式文件系统

2.断点续传

  

三.分布式任务调度


一文带你搞懂xxl-job(分布式任务调度平台)url:https://zhuanlan.zhihu.com/p/625060354

 

四.认证与授权


 

 

 

第三大模块(自己搭建本项目)


 

每一种类的工程都有不同的作用,下面是对其功能进行说明:
•父工程
○对依赖包的版本进行管理
○本身为Pom工程,对子工程进行聚合管理
•基础工程
○继承父类工程
○提供基础类库
○提供工具类库
•微服务工程
○分别从业务、技术方面划分模块,每个模块构建为一个微服务。
○每个微服务工程依赖基础工程,间接继承父工程。
○包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务等。
1.创建:父工程
并在pom文件中加入依赖

 2.创建基础工程

-删除main及test下的:启动类,配置文件

 3.微服务工程

 

 

 
 
 
自己搭建过程中遇到的问题
1.docker中用的是mysql是5.7.34,这样xuecheng-plus-generator就对接本地中表,并生成如下数据

原代码xuecheng-plus-parent  
<mysql-connector-java.version>8.0.30</mysql-connector-java.version>
替换为
<mysql-connector-java.version>5.1.48</mysql-connector-java.version>

 

 
 
 
 
 

 

posted @ 2023-11-15 10:17  Sara软件测试  阅读(146)  评论(0)    收藏  举报