Spring Boot 使用 devtools 实现热部署

概述

在进行 Spring Boot 的 Web 项目开发中,我们经常会遇到源代码文件、配置文件等的修改,但每次修改后都会重启 Web 服务器才能修改后的文件生效,这样很耗时,影响开发效率。而热部署就是不需要重启 Web 服务器就可以保证各项文件修改后便立即生效。

spring-boot-devtools 介绍

  • spring-boot-devtools 是一个为开发者服务的模块,可以实现 Spring Boot 热部署,其中最重要的功能就是自动将应用代码更改到最新的 App 上面去。

  • spring-boot-devtools 可以实现页面热部署,实现类文件热部署(类文件修改后不会立即生效),实现对属性配置文件的热部署。其原理是 spring-boot-devtools 会监听 Classpath 下的文件变动,并且会立即重启应用(发生在保存时机)。

  • 由于采用的虚拟机机制,重启的时候只是加载了在开发的 Class,没有重新加载第三方的 JAR 包,所以重启是很快的。

配置热部署

  • 在 pom.xml 文件中,添加项目 spring-boot-devtools 依赖
1
<!--热部署依赖-->
2
<dependency>
3
    <groupId>org.springframework.boot</groupId>
4
    <artifactId>spring-boot-devtools</artifactId>
5
    <optional>true</optional>
6
 </dependency>
7
8
<plugin>
9
    <groupId>org.springframework.boot</groupId>
10
    <artifactId>spring-boot-maven-plugin</artifactId>
11
    <!--没有该项配置,热部署不会起作用-->
12
    <configuration>
13
        <fork>true</fork>
14
    </configuration>
15
 </plugin>
  • 在资源文件 application.properties 中进行热部署的相关配置
1
# 页面修改后立即生效,关闭缓存,立即刷新
2
spring.thymeleaf.cache=false
3
# 热部署生效
4
spring.devtools.restart.enabled=true
5
# 设置需要重启的目录
6
spring.devtools.restart.additional-paths=src/java/main
7
# 设置不需要重启的目录
8
spring.devtools.restart.exclude=static/**,public/**,WEB-INF/**
9
# 为 mybatis 设置,生产环境可删除
10
# restart.include.mapper=/mapper-[\\w-\\.]+jar
11
# restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar

当热部署搭建完成后,程序只要启动一次即可,后面修改代码时,只需保存后便可以触发热部署机制,自动重启服务。

设置 IDEA 环境自动编译

在使用 IDEA 编译器时,需要设置自动编译。

  • 在编译器选项中勾选 Build project automatically 选项

idea-compiler

  • 使用快捷键:Ctrl + Alt + Shift + / 调出 Registry 窗口,勾选 compiler.automake.allow.when.app.running 选项

registry

源码地址

springboot-devtools