一文教会你 Spring Boot中的热部署与单元测试(简单易懂,附源码实战)

需要源码请点赞关注收藏和私信博主

前言:热部署的简介和目的

在实际应用开发过程中、业务变化、代码错误等发生时,难免修改程序。为了正确运行出修改的结果,我们往往需要从重启应用,否则将不能看到修改后的效果,这一启动过程时非常浪费时间的,导致开发效率低,因此我们有必要学习Spring Boot开发的热部署,自动实现应用的重启和部署,大大提高 开发和调试效率。

开发热部署的目的是使应用自动 重启和部署,提高开发效率

一、模板引擎的热部署

在Spring Boot应用中,使用模板引擎的页面默认使开启缓存的,如果修改了页面内容,则刷新页面是得不到修改后的页面的效果的。因此可以在配置文件application.properties中关闭模板引擎的缓存

spring.thymeleaf.cache=false 关闭Thymeleaf的缓存

spring.freemarker.cache=false 关闭FreeMarker的缓存 

spring.groovy.template.cache=false 关闭Groovy的缓存 

二、使用spring-boot-devtools进行热部署

在Spring Boot应用的pom.xml文件中添加spring-boot-devtools依赖即可实现页面和代码的热部署,其最重要的功能是自动实现将修改的应用代码更新到最新的应用上。

1:创建Spring Boot Web应用ch9_1

2:添加spring-boot-devtools依赖

在pom.xml中添加如下代码



-

4.0.0


-

org.springframework.boot

spring-boot-starter-parent

2.1.8.RELEASE








com.ch

ch9_1

0.0.1-SNAPSHOT

ch9_1

Demo project for Spring Boot


-

11




-


-

org.springframework.boot

spring-boot-starter-web




-

org.springframework.boot

spring-boot-devtools




-

mysql

mysql-connector-java

5.1.45










-

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.0




-

org.springframework.boot

spring-boot-starter-test

test






-


-


-

org.springframework.boot

spring-boot-maven-plugin







 3:创建控制器类

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";
	}
}

4:运行 Ch91Application主类

然后修改testDevTools方法 改返回值 然后直接刷新页面即可发现结果已经修改 即完成了热部署

三、Spring Boot的单元测试

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

1:创建Spring Boot Web应用ch9_2

2 3步代码可以参照我之前的博客 此处不表

2:修改pom.xml文件 添加mysql依赖

3:修改application.properties内容 配置数据库连接 

4:创建持久化实体类

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;
	}
}

5:创建数据访问层

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{
	
}

6:创建控制器

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);
	}
}

7:创建测试用例

包括基于@WebMvcTest的测试用例WebMvcStudentController

基于@SpringBootTest的测试用例SpringBootTestStudentController

需要此处源码可点赞关注收藏后私信博主

你可能感兴趣的:(Spring,Boot,spring,boot,单元测试,java,spring,eclipse)