spring-boot-devtools
spring-boot-devtools可以使SpringBoot程序在类路径发生变化时,通过自动重启,重新加载类,来达到热部署的效果。接下来我们实践下如何在IDEA中使其自动生效。
第一步:添加包依赖
在你的pom文件中,添加如下依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- 依赖不会传递,之后依赖此项目的项目如果想要使用devtools,需要重新引入 -->
<optional>true</optional>
</dependency>
第二步:开启自动编译
如下图,将你的IDEA中的首选项配置中的Build project automatically设置为true。意为自动编译你的工程。
第三步:开启运行时自动编译
1、根据操作系统的不同,我们在IDEA中按下如下对应的快捷键,会出现如下的registry选项:
-
Windows:ctrl + shift + alt + /
-
MAC:command + shift + option + /
2、点击进入registry选项后,出现如下界面,我们将compiler.automake.allow.when.app.running勾中即可。
第四步:验证效果
如下图所示,springboot启动的时候,是restartedMain方法启动的,我们可以测试了。
- 我们随便修改一个java类,系统自动重启。
- 我们随便修改一个配置文件,系统自动重启。
- 是的,一切就是这么简单,我们想要的效果已经具备了。
知识点
-
这里的自动启动与我们自己用手点击的重新启动的区别?
spring-boot-devtools使用了两个ClassLoader: 一个Classloader加载那些不会改变的类(第三方Jar包); 另一个ClassLoader加载会更改的类,称为restart ClassLoader。 这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
-
某些文件变化,我们不想让其重启,如何配置?
spring.devtools.restart.exclude: src/main/java/com/test
-
所有文件变化,我们都不想让其自动重启了,如何配置?
spring.devtools.restart.enabled: false