2021/08/23笔记

我们于2021/08/23 的学习目标是:SpringBoot与LayUI,核心任务为:

1、学习技术:

1)、Swagger2

2)、SpringBoot应用热部署

3)、SpringBoot单元测试

4)、分布式缓存Ehcache整合

5)、分布式事务|全局异常管理

6)、SpringBoot数据校验Validation

7)、LayUI

2、文档总结

1)、Swagger2

在面向不同的终端调用公用一套接口API开发时,联调测试时就需要知道后端提供的接口 API列表文档,对于服务端开发人员来说就需要编写接口文档,描述接口的调用地址、参数结果等,这里借助第三方构建工具 Swagger2 来实现 API 文档生成功能。

pom.xml依赖添加

<dependency>

   <groupId>io.springfox</groupId>

   <artifactId>springfox-swagger2</artifactId>

   <version>2.9.2</version>

</dependency>

<dependency>

   <groupId>io.springfox</groupId>

   <artifactId>springfox-swagger-ui</artifactId>

   <version>2.9.2</version>

</dependency>

配置类添加

@Configuration

@EnableSwagger2

public class Swagger2 {

    @Bean

    public Docket createRestApi() {

        return new Docket(DocumentationType.SWAGGER_2)

                .apiInfo(apiInfo())

                .select()

.apis(RequestHandlerSelectors.basePackage("com.xxxx.springboot.controller"))

                .paths(PathSelectors.any())

                .build();

    }

    private ApiInfo apiInfo() {

        return new ApiInfoBuilder()

                .title("用户管理接口API文档")

                .version("1.0")

                .build();

    }

}

常用注解:

@Api:用在请求的类上,说明该类的作用

@ApiOperation:用在请求的方法上,说明方法的作用

@AplimplicitParams:用在请求的方法上,包含一组参数的声明。

@ApiImplicitParam:用在@AplimplicitParams注解中,指定一个请求参数的配置信息

  •    name:参数名
  •    value:参数的解释
  •    required:是否必须需要
  •    ParamType:参数位置

      header --> 请求参数的获取(@RequestHeader)

      query --> 请求参数的获取(@RequestParam)

      path(用于Restful接口) --> 请求参数的获取(@PathVariable)

      body

      form

  •    dataType:参数类型,默认String,其他值dataType="Integer"
  •    defaultValue:参数的默认值

@ApiResponses:用于请求的方法上,表示一组响应

@ApiResponse:用在@ApiResponses上,一般用于表达一个错误的响应信息。

   code:响应码,例如400

   message:响应信息

   response:抛出异常的类

@ApiModel:用于响应类上,表示一个返回响应数据的信息

   (这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)

@ApiModelPropery:用在属性上,描述响应类的属性

2)、SpringBoot应用热部署

热部署,就是在应用正在运行的时候升级软件(增加业务/修改bug),却不需要重新启动应用。

大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的 Class 文件,这个文件里记录着和代码等对应

的各种信息,然后 Class 文件将被虚拟机的 ClassLoader 加载。

而热部署正是利用了这个特点,它监听到如果有 Class 文件改动了,就会创建一个新的 ClaassLoader进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前,Spring Boot 通过配置 DevTools

工具来达到热部署效果。

在原理上是使用了两个 ClassLoader,一个 ClassLoader 加载那些不会改变的类(第三方 Jar 包),另一个ClassLoader 加载会更改的类,称为 restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个 restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

3)、SpringBoot单元测试

做过 web 项目开发的对于单元测试都并不陌生了,通过它能够快速检测业务代码功能的正确与否,SpringBoot 框架对单元测试也提供了良好的支持。

pom.xml测试依赖添加

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-test</artifactId>

</dependency>

4)、分布式缓存Ehcache整合

EhCache 是一个比较成熟的 Java 缓存框架,最早从 hibernate 发展而来, 是进程中的缓存系统,它提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的 cache 管理方案,快速简单。

Spring Boot 对 Ehcache 的使用提供支持,所以在 Spring Boot 中只需简单配置即可使用 Ehcache 实现数据缓存处理。

注解说明:

@CacheConfig:用于标注在类上,可以存放该类中所有缓存的公有属性,比如设置缓存的名字。

配置了该数据访问对象中返回的内容将存储于名为users的缓存对象中,我们也可以不使用该注解,直接通过@Cacheable自己配置缓存集的名字来定义。

@Cacheable:应用到读取数据的方法上,即可缓存的方法,如查找方法,先从缓存中读取,如果没有再调用相应方法获取数据,然后把数据添加到缓存中。

@CachePut:应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓存,@CachePut 的参数与 @Cacheable 类似。

@CacheEvict:应用到移除数据的方法上,如删除方法,调用方法时会从缓存中移除相应的数据

@Caching:组合多个 Cache 注解使用。

//@Caching使用示例

//将id ---> user;username ---> user;age ---> user进行缓存。

@Caching(

   put = {

      @CachePut(value = "user", key = "#user.id"),

      @CachePut(value = "user", key = "#user.username"),

      @CachePut(value = "user", key = "#user.age")

   }

}

5)、分布式事务|全局异常管理

Spring Boot 事务支持

在使用 Jdbc 作为数据库访问技术时,Spring Boot 框架定义了基于 jdbc 的PlatformTransactionManager 接口的实现 DataSourceTransactionManager,并在 Spring Boot 应用启动时自动进行配置。如果使用 jpa 的话 Spring Boot 同样提供了对应实现。

这里 Spring Boot 集成了 mybatis 框架,mybatis 底层数据访问层实现基于 jdbc 来实现,所以在Spring Boot 环境下对事务进行控制,事务实现由 Spring Boot 实现并自动配置,在使用时通过注解方式标注相关方法加入事务控制即可。

Spring Boot 全局异常处理

SpringMvc 中对异常统一处理提供了相应处理方式,推荐大家使用的是实现接口HandlerExceptionResolver的方式,对代码侵入性较小。

相关注解:

@ControllerAdvice

该注解组合了 @Component 注解功能,最常用的就是作为全局异常处理的切面类,同时通过该注解可以指定包扫描的范围。@ControllerAdvice 约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用@ResponseBody 进行 json 转换。

@ExceptionHandler

该注解在 Spring 3.X 版本引入,在处理异常时标注在方法级别,代表当前方法处理的异常类型有哪些

具体应用以 Restful 接口为例,测试保存用户接口。

6)、SpringBoot数据校验Validation

日常项目开发中,对于前端提交的表单,后台接口接收到表单数据后,为了程序的严谨性,通常后端会加入业务参数的合法校验操作来避免程序的非技术性 bug,这里对于客户端提交的数据校验,SpringBoot 通过 spring-boot-starter-validation 模块包含了数据校验的工作。

校验相关注解:

@AssertFalse 可以为null,如果不为null的话必须为false

@AssertTrue 可以为null,如果不为null的话必须为true

@DecimalMax 设置不能超过最大值

@DecimalMin 设置不能超过最小值

@Digits 设置必须是数字且数字整数的位数和小数的位数必须在指定范围内

@Future 日期必须在当前日期的未来

@Past 日期必须在当前日期的过去

@Max 最大不得超过此最大值

@Min 最大不得小于此最小值

@NotNull 不能为null,可以是空

@Pattern 必须满足指定的正则表达式

@Size 集合、数组、map等的size()值必须在指定范围内

@Email 必须是email格式

@Length 长度必须在指定范围内

@NotBlank 字符串不能为null,字符串trim()后也不能等于“”

@NotEmpty 不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“”

@Range 值必须在指定范围内

@URL 必须是一个URL

7)、LayUI

开源模块化前端 UI 框架

由职业前端倾情打造,面向全层次的前后端开发者,易上手开箱即用的 Web UI 组件库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值