一、热部署
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提供的随机数为其赋值。