在SpringBoot开发调试中,如果每次代码的修改都需要重新启动再调试,可能比较浪费费时间。同时,通常在项目中会存在许多第三方依赖,这部分是不变的,所以重启时重新加载第三方依赖,比较耗时,且没有必要。SpringBoot团队针对此问题提供了spring-boot-devtools(简称devtools)插件,它试图提升开发调试的效率。
Spring Boot Dev Tools将划分应用程序的类路径并分配给两个不同的类加载器:
- 基本类加载器(base classloader) :包含一些不可变类或者几乎不会被修改文件,例如Spring Boot JAR或第三方库。
- 重新启动类加载器(restart classloader) :包含应用程序的文件,这些文件在项目开发过程中将频繁更改。
重新启动应用程序后,现有的重新启动类加载器将被丢弃,新的重新启动类加载器将被启动。这种方法意味着应用程序的重启通常比“冷启动”要快得多,因为基本类加载器没有受到影响并且一直存在着。
热部署:对于Java应用程序来说,热部署就是在运行时更新Java类文件。
配置devtools实现热部署
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
idea配置:
方式1:可以使用mvn compile编译触发更新,也可使用快捷键ctrl+F9手动编译(主要原因在于:devtools主要监控类路径下的文件变化,当类路径下的文件如编译后的.class文件,配置文件等)
方式2:IDEA需开启运行时编译,自动重启更新:File->Setting->Build,Execution,Deployment->Compile
application.yml配置:
restart:
enabled:true #开启热部署
additional-paths:src/main/java #重启目录
exclude:WEB-INF/**
thymeleaf:
cache: false #使用Thymeleaf模板引擎,关闭缓存
重新启动应用
在完成以上配置后,我们只需要在更改代码后重新启动应用,即可享受热部署的功能。