使用spring-boot-devtools进行热部署
添加devtools maven依赖以及spring-boot-maven-plugin
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<option>true</option>
<scope>true</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--如果没有该项配置,devtools将不起作用-->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
原理:
底层使用了两个classloader,一个加载不会改变的类(eg.第三方的jar),一个加载会更改的类,称之为 RestartClassLoader 。
代码发生更改是,丢弃原来的RestartClassLoader,重新创建一个RestartClassLoader,实现了较快的重启。
如果不能实现热部署,一般有以下几种可能性:
- springboot版本
- 是否加入plugin以及设置< fork>true< /fork>
- eclipse的话手否开启自动编译
- 如果设置springApplication.setRegisterShutdownHook(false),则自动重启将不起作用