SpringBoot.05.SpringBoot本地测试与热部署

x33g5p2x  于2022-04-11 转载在 Spring  
字(2.0k)|赞(0)|评价(0)|浏览(395)

引言

往往在开发过程中业务代码可能非常复杂,需要频繁启动服务器进行测试,显得非常麻烦!这个时候使用springboot提供的本地测试将会是一个很好的解决方案!

为了进一步提高开发效率,springboot为我们提供了全局项目热部署,它使得日后在开发过程中修改了部分代码以及相关配置文件后不需要每次重启,一旦在项目中开启了springboot全局热部署,只需要在修改之后等待几秒即可使修改生效。

这里我们以SpringBoot.04.SpringBoot整合Mybatis中的项目为演示项目来进行说明

本地测试

1.pom.xml

我们在pom.xml文件中添加本地测试依赖,内容如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
</dependency>

2.UserTest.java

测试类需要在指定的test目录下编写,我们在test/java下的com.christy包下新建测试类UserTest.java。具体如下:

import com.christy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @Author Christy
 * @Date 2021/9/2 15:14
 * @SpringBootTest 修饰范围: 用在类上
 *                 作用: 正在类的实例化过程中启动本地Spring环境
 **/
@SpringBootTest
public class UserTest {

    private UserService userService;
    @Autowired
    public UserTest(UserService userService) {
        this.userService = userService;
    }

    @Test
    public void testFindALl(){
        userService.findAll().forEach(user -> System.out.println(user.toString()));
    }
}

3.测试

本地测试不需要启动项目,只需要在需要测试的方法上点击Debug methodName()即可,如下图所示:

我们运行该方法,发现结果能正常打印。如下图所示:

热部署工具

1.pom.xml

开启热部署同样的需要先引入相应的依赖,具体如下:

<!-- 每次新建的项目如果需要开启热部署都需要引入该依赖 -->
<dependency>
  	<groupId>org.springframework.boot</groupId>
  	<artifactId>spring-boot-devtools</artifactId>
  	<optional>true</optional>
</dependency>

2.设置IDEA支持自动编译

在IDEA中依次选择File->settings->Build,Execution,Deployment->Compiler,然后勾选Build project automatically,最后点击Appkly->OK。如下图所示:

3.开启允许在运行过程中修改文件

这个选项不在settings中,我们使用快捷键ctrl + alt + shift + /,在Maintenance中选择Register。如下图所示:

然后在Register中找到compiler.automake.allow.when.app.running并勾选上即可。如下图所示:

4.测试

在开启热部署之前,我们启动项目是控制台打印信息如下所示:

现在我们重新启动项目,随便修改下UserController.java中的内容,如果看到如下效果说明我们的热部署生效了

热部署并不是真正的重启项目。我们知道Java程序编译生成的.class文件都是运行在JVM中的ClassLoader里面,当我们修改了某个文件以后,热部署工具能够检测到与之对应的ClassLoader中的.class文件并强制刷新。

热部署功能在我们项目比较小的时候可能会觉得他的时间比我们重启服务的时间还要长,但是当我们的项目比较大的时候优势就明显了。当然了有人觉得这个功能比较鸡肋,全看个人吧!

相关文章