1.引入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-devtools</artifactId>
  4. <version>2.3.2.RELEASE</version> # 根据springboot版本来
  5. <optional>true</optional>
  6. </dependency>

2.application配置

  1. spring:
  2. devtools:
  3. restart:
  4. enabled: true #是否自动刷新



3.配置idea




4.测试

修改完之后按 ctrl+f9就可以热加载了

5.高级配置

热部署生效 spring.devtools.restart.enabled: true #设置重启的目录
#spring.devtools.restart.additional-paths: src/main/java
#classpath目录下的WEB-INF文件夹内容修改不重启 spring.devtools.restart.exclude: WEB-INF/**

6.结论

测试
- 修改类–>保存:应用会重启
- 修改配置文件–>保存:应用会重启
- 修改页面–>保存:应用不会重启,但会重新加载,页面会刷新(原理是将spring.thymeleaf.cache设为false,参考:Spring Boot配置模板引擎)·

7.原理

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。