# spring-boot-devtools 热部署

# 原理:

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

# pom依赖

<!-- spring-boot-devtools 热部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
            </configuration>
        </plugin>
    </plugins>
</build>

# application.yml配置

  1. Thyemleaf模板缓存禁用:
# 模板引擎
thymeleaf:
    mode: HTML
    encoding: utf-8
    # 禁用缓存
    cache: false
  1. 热部署开启及自定义
# 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
      #禁用日志报告
#      log-condition-evaluation-delta: false
      #不需要修改触发重启的文件目录
#      exclude: static/,public/
      #默认配置下还需要在新增的排除目录
#      additional-exclude:
      #添加需要监视需改文件后重启的路径
#      additional-paths:

# Idea设置

  1. File --> Settings --> Build,Execution,Deployment --> Compiler,勾选

img

  1. 使用快捷键Crtl+Shift+Alt+/,并打开Registry,勾选图中红框所示

img

img

重启项目。至此,修改页面(Idea自动保存)刷新后,即可看到修改的内容。