需要源码请点赞关注收藏和私信博主
在实际应用开发过程中、业务变化、代码错误等发生时,难免修改程序。为了正确运行出修改的结果,我们往往需要从重启应用,否则将不能看到修改后的效果,这一启动过程时非常浪费时间的,导致开发效率低,因此我们有必要学习Spring Boot开发的热部署,自动实现应用的重启和部署,大大提高 开发和调试效率。
开发热部署的目的是使应用自动 重启和部署,提高开发效率
在Spring Boot应用中,使用模板引擎的页面默认使开启缓存的,如果修改了页面内容,则刷新页面是得不到修改后的页面的效果的。因此可以在配置文件application.properties中关闭模板引擎的缓存
spring.thymeleaf.cache=false 关闭Thymeleaf的缓存
spring.freemarker.cache=false 关闭FreeMarker的缓存
spring.groovy.template.cache=false 关闭Groovy的缓存
在Spring Boot应用的pom.xml文件中添加spring-boot-devtools依赖即可实现页面和代码的热部署,其最重要的功能是自动实现将修改的应用代码更新到最新的应用上。
在pom.xml中添加如下代码
- <?xml version="1.0" encoding="UTF-8"?>
-
- -<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
-
- <modelVersion>4.0.0</modelVersion>
-
-
- -<parent>
-
- <groupId>org.springframework.boot</groupId>
-
- <artifactId>spring-boot-starter-parent</artifactId>
-
- <version>2.1.8.RELEASE</version>
-
- <relativePath/>
-
- <!-- lookup parent from repository -->
-
-
- </parent>
-
- <groupId>com.ch</groupId>
-
- <artifactId>ch9_1</artifactId>
-
- <version>0.0.1-SNAPSHOT</version>
-
- <name>ch9_1</name>
-
- <description>Demo project for Spring Boot</description>
-
-
- -<properties>
-
- <java.version>11</java.version>
-
- </properties>
-
-
- -<dependencies>
-
-
- -<dependency>
-
- <groupId>org.springframework.boot</groupId>
-
- <artifactId>spring-boot-starter-web</artifactId>
-
- </dependency>
-
-
- -<dependency>
-
- <groupId>org.springframework.boot</groupId>
-
- <artifactId>spring-boot-devtools</artifactId>
-
- </dependency>
-
-
- -<dependency>
-
- <groupId>mysql</groupId>
-
- <artifactId>mysql-connector-java</artifactId>
-
- <version>5.1.45</version>
-
- <!-- MySQL8.x时,请使用8.x的连接器 -->
-
-
- </dependency>
-
- <!-- MyBatis-Spring,Spring Boot应用整合MyBatis框架的核心依赖配置 -->
-
-
-
- -<dependency>
-
- <groupId>org.mybatis.spring.boot</groupId>
-
- <artifactId>mybatis-spring-boot-starter</artifactId>
-
- <version>2.1.0</version>
-
- </dependency>
-
-
- -<dependency>
-
- <groupId>org.springframework.boot</groupId>
-
- <artifactId>spring-boot-starter-test</artifactId>
-
- <scope>test</scope>
-
- </dependency>
-
- </dependencies>
-
-
- -<build>
-
-
- -<plugins>
-
-
- -<plugin>
-
- <groupId>org.springframework.boot</groupId>
-
- <artifactId>spring-boot-maven-plugin</artifactId>
-
- </plugin>
-
- </plugins>
-
- </build>
-
- </project>
- package com.ch.ch9_1;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- @RestController
- public class TestDevToolsController {
- @RequestMapping("/testDevTools")
- public String testDevTools() {
- return "test DevTools 222";
- }
- }
然后修改testDevTools方法 改返回值 然后直接刷新页面即可发现结果已经修改 即完成了热部署
Spring Boot为测试提供 了一个名为spring-boot-starter-test的Starter 使用STS创建Spring Boot应用时将自动添加上述依赖。它主要提供了以下测试库
1:JNnit:标准的单元测试Java应用程序
2:Spring Test&Spring Boot Test:针对Spring Boot应用程序的单元测试
3:Mockito:Java mocking框架 用于模拟任何Spring 管理的Bean
4:AssertJ:一个流畅的assertion库
5:JSONassert:对JSON对象或JSON字符串断言的库
6:JsonPath:提供类似于Xpath那样的符号来获取JSON数据片段
下面分别通过使用@WebMvcTest和@SpringBootTest两种方式测试一个控制器方法是否满足测试用力
@WebMvcTest
2 3步代码可以参照我之前的博客 此处不表
- package com.ch.ch9_2.entity;
- import java.io.Serializable;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
- import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
- @Entity
- @Table(name = "student_table")
- /**解决No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor异常*/
- @JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
- public class Student implements Serializable{
- private static final long serialVersionUID = 1L;
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private int id;//主键
- private String sno;
- private String sname;
- private String ssex;
- public Student() {
- super();
- }
- public Student(int id, String sno, String sname, String ssex) {
- super();
- this.id = id;
- this.sno = sno;
- this.sname = sname;
- this.ssex = ssex;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getSno() {
- return sno;
- }
- public void setSno(String sno) {
- this.sno = sno;
- }
- public String getSname() {
- return sname;
- }
- public void setSname(String sname) {
- this.sname = sname;
- }
- public String getSsex() {
- return ssex;
- }
- public void setSsex(String ssex) {
- this.ssex = ssex;
- }
- }
- package com.ch.ch9_2.repository;
- import org.springframework.data.jpa.repository.JpaRepository;
- import com.ch.ch9_2.entity.Student;
- public interface StudentRepository extends JpaRepository<Student, Integer>{
-
- }
- package com.ch.ch9_2.controller;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import com.ch.ch9_2.entity.Student;
- import com.ch.ch9_2.repository.StudentRepository;
- @RestController
- @RequestMapping("/student")
- public class StudentController {
- @Autowired
- private StudentRepository studentRepository;
- /**
- * 保存学生信息
- */
- @PostMapping("/save")
- public String save(@RequestBody Student student) {
- studentRepository.save(student);
- return "success";
- }
- /**
- * 根据id查询学生信息
- */
- @GetMapping("/getOne/{id}")
- public Student getOne(@PathVariable("id") int id){
- return studentRepository.getOne(id);
- }
- }
包括基于@WebMvcTest的测试用例WebMvcStudentController
基于@SpringBootTest的测试用例SpringBootTestStudentController
需要此处源码可点赞关注收藏后私信博主