SpringBoot开发实用篇1

一、热部署

1.手工启动热部署

经过测试当前是没有启动热部署的:
在这里插入图片描述
在这里插入图片描述
再将sout的信息多复制几份,刷新功能,发现控制台还是只打印一行信息。说明当前热部署是没有生效的。
手动开启热部署:
在pom.xml文件中加入开发者工具配置热部署:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

运行程序后,修改代码发现热部署没有生效。
需要配合项目构建工具共同使用:
在这里插入图片描述
修改代码后,点击Build Project,热部署就成功了(激活热部署)。
关于热部署:
重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器;
重载(ReLoad):jar包,加载位置base类加载器。
热部署是不需要将jar包再加载一遍的,热部署仅仅是restart过程,而不包括relload过程。(热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源)
程序第一次启动的时候既有restart,也有reload过程。

2.自动启动热部署

设置自动构建项目:
在这里插入图片描述
在这里插入图片描述
IDEA失去焦点5秒后,自动热部署。

3.热部署配置范围

页面不参与热部署,页面更改后,一刷新,就显示出来了。
配置文件参与热部署。
自定义重启排除项:下面设置的文件不参与热部署

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC&useSSL=false
      username: root
      password: "****"
  devtools:
    restart:
      #设置不参与热部署的文件或文件夹
      exclude: static/**,public/**,config/application.yml

4.关闭热部署

设置高优先级属性(Java系统属性)禁用热部署:为了覆盖所有配置文件。
在这个配置文件中设置是不行的,可能有更高优先级的配置文件开启了热部署。
在这里插入图片描述
设置在引导类中:
在这里插入图片描述

二、配置高级(围绕配置中数据的读取)

1.@ConfigurationProperties可以为第三方的bean绑定属性

@ConfigurationProperties属性可以将配置文件的内容加载到bean容器中。

加载自定义的属性到bean中

配置文件中:
在这里插入图片描述
这个类加载配置文件中的内容,并将这个类交给bean来管理
在这里插入图片描述
测试一下,bean中有配置文件的内容:
在这里插入图片描述

加载第三方依赖的属性到bean中

使用Durid数据源连接池进行测试:
在这里插入图片描述
使用@ConfigurationProperties属性为第三方bean绑定属性:
把datasource改成驼峰命名法,就会报错,为什么?(宽松绑定/松散绑定)
在这里插入图片描述
在这里插入图片描述

@ConfigurationProperties不仅可以为自己开发的组件做bean的属性绑定,还可以为第三方的bean绑定属性,格式相同。
@EnableConfigurationProperties和@ConfigurationProperties的区别:
Enable可以看作是一个开关,开启配置属性的功能,向对应的类里做属性注入,要设定目标是谁,@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器,使用所以不用写@Component

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

2.宽松绑定/松散绑定

@ConfigurationProperties绑定属性支持属性名宽容绑定
在配置文件中任意写,注解都能认出来

ipAddress: 192.168.1.1
ip_address: 192.168.1.1
ip-address: 192.168.1.1
IP_ADDRESS: 192.168.1.4

@Value注解不能用松散绑定,在配置文件中写什么,注解里就应该写什么:
在这里插入图片描述
@ConfigurationProperties注解的前缀有格式,写成全小写或烤肉串命名。

@ConfigurationProperties(prefix = "datasource")

3.常用计量单位绑定

SpringBoot支持JDK8提供的时间与空间计量单位
在这里插入图片描述
在这里插入图片描述

4.数据校验 开启bean数据校验

1.添加JSR303规范坐标与Hibernate校验框架对应坐标:
在这里插入图片描述
2.开启Bean校验功能
3.使用具体校验规则规范数据校验格式
在这里插入图片描述

三、与测试有关

基于基础篇测试之上的补充:web环境、表现层的测试、数据层的测试。

1.加载测试属性专用属性

应用场景:测试环境中使用临时的属性。
1.使用properties属性可以为当前测试用例添加临时的属性配置
配置文件中有属性:
在这里插入图片描述
测试文件中通过properties设置属性:临时配置有效。
在这里插入图片描述
在这里插入图片描述
2.使用args属性为当前测试用例添加临时的命令行参数
在这里插入图片描述
3.同时使用 properties级别高

在这里插入图片描述

2.加载测试专用配置

如何在测试环境中临时加第三方bean?
例如Mybatis-plus用的分页的拦截器,配置了一个第三方bean加入到容器中,本次测试环境中加入一个临时的bean,辅助测试。这本bean只服务于本次的测试过程,不服务于其他的,不定义到源码级别。

使用@Import注解加载当前测试类专用的配置
在这里插入图片描述
在这里插入图片描述

3.Web环境模拟测试

如何在测试用例测表现层?需要启动web环境的模拟
可以选用的参数有:DEFINED_PORT,RANDOM_PORT,NONE
在这里插入图片描述
发送虚拟请求:虚拟请求测试
在这里插入图片描述
匹配响应体:进行状态的匹配
先去设定一个预计值,再添加预计值到本次调用结果中进行匹配,成功过,失败给出信息。
在这里插入图片描述
匹配响应体:执行内容的匹配
匹配字符串:
在这里插入图片描述
匹配json
在这里插入图片描述
匹配响应头:匹配是不是json
在这里插入图片描述
在实际测试中,可以并列使用,预定义一个,匹配一个。

/**
     * 在实际开发中应该怎么写
     * @param mvc
     * @throws Exception
     */
    @Test
    void testGetById(@Autowired MockMvc mvc) throws Exception {
        MockHttpServletRequestBuilder builder= MockMvcRequestBuilders.get("/books");
        ResultActions action = mvc.perform(builder);

        StatusResultMatchers status = MockMvcResultMatchers.status();
        ResultMatcher ok = status.isOk();
        action.andExpect(ok);

        ContentResultMatchers content = MockMvcResultMatchers.content();
        ResultMatcher result = content.json("{\"id\":1,\"name\":\"springboot\",\"type\":\"springboot\",\"description\":\"springboot\"}");
        action.andExpect(result);

        HeaderResultMatchers header = MockMvcResultMatchers.header();
        ResultMatcher contentType = header.string("Content-Type", "application/json");
        action.andExpect(contentType);

    }

4.数据层测试回滚

为测试用例添加事务,SpringBoot会对测试用例对应的事务提交操作进行回滚;
如果想在测试用例中提交事务,可以通过@Rellback注解设置。
true进行回滚,false不进行回滚。
在这里插入图片描述

5.测试用例数据设定

测试用例中的数据不能写死,应该用随机值。
测试用例数据通常采用随机值进行测试,使用SpringBoot提供的随机数为其赋值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述