在IDEA中使用Spring-boot-devtools进行热部署

1.简介

参考文档:Developing with Spring Boot

Spring-boot-devtools是Springboot中包含的一款额外的热部署工具。

其原理是通过使用两个类加载器(classloader)来工作,一个base classloader用于加载没有变化的类,比如第三方的jar包,另一个restart classloader 负责加载经常变化的文件,比如classpath中编写的class文件,每次应用重启的时候,restart classloader 就会被丢弃,重新创建一个新restart classloader 来加载classpath中的class文件,而base classloader则无需重新创建,这样就大大减少了启动时间。

Spring-boot-devtools触发重启条件:

  • 在eclipse中,保存修改文件会导致classpath中的文件更新,则会触发重启
  • 在IDEA中,构建项目,Build, Build Project都会触发重启
  • 使用构建插件,比如maven执行mvn compile或者gradle build都会触发重启

注意:对于resources目录中的一些静态文件修改则不会重启服务。但静态文件修改依旧会实时生效。

对比JRebel:

区别1:热重启VS热重载:

Srping-boot-devtools和JRebel最大的区别就是Srping-boot-devtools是热重启,而JRebel是热重载。简单来说Srping-boot-devtools每次变更类都会进行一次重启,而JRebel每次类发生变更只是将变更的类重新加载,因此在效率上JRebel会更快。

区别2:Srping-boot-devtools是免费使用的,JRebel是收费的

2. 环境:

  • SpringBoot 2.6.3
  • IDEA 2021.2.1

3. 配置步骤:

3.1 配置Sringboot

 修改POM.xml 加入spring-boot-devtools依赖


	org.springframework.boot
	spring-boot-devtools
	runtime
	true

修改application.yml

spring:
  devtools:
    #热部署生效,默认就是true
    restart:
      enabled: true

然后启动服务进行测试。

测试步骤:

编写一个controller

@Api(tags = "Hello模块")
@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "hello David";
    }
}

修改返回值后看控制台是否重启生效,如果代码修改后没有重启,可能的问题是IDE没有设置自动编译功能,需要手动编译(build)一下,或者将IDE设置为自动编译。

3.2 设置IDEA自动编译

当我们修改了java类后,IDEA默认是不自动编译的,而spring-boot-devtools又是监测classpath下的文件发生变化才会重启应用,如果不想每次都点击build project就需要设置IDEA的自动编译

设置方法如下:

在Settings->Build,Excution,Deployment ->Compiler勾选Build project automatically

在IDEA中使用Spring-boot-devtools进行热部署_第1张图片

然后在Settings->Advanced Settings中勾选下面的选项

在IDEA中使用Spring-boot-devtools进行热部署_第2张图片

你可能感兴趣的:(SpringBoot,intellij-idea,spring,java)