SpringBoot配置热部署

热部署

在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。对于一个后端开发者来说,重启过程确实很难受啊。在Java开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。下面我们就看看对于简单的类修改的热部署怎么实现。

devtools工具包

devtools 会监听 classpath 下的文件变动,并且会立即重启应用

idea配置

(1)Settings-Compiler

开启Build Project automatically

(2)Settings-Advanced Settings

开启Allow auto-make to start even if developed application is currently running

添加Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

配置不需要热部署的文件

如在application.properties文件中添加spring.devtools.restart.exclude=config/**,则在config目录下的文件做修改时是不会热部署的。

调整检测文件变化的时间间隔

FileSystemWatcher 的工作原理是轮询具有特定时间间隔的类更改,然后等待预定义的静默期以确保不再有更改。 由于 Spring Boot 完全依赖于 IDE 来编译文件并将其复制到 Spring Boot 可以读取它们的位置,因此您可能会发现,当 devtools 重新启动应用程序时,有时某些更改不会反映出来。 如果经常观察到此类问题,请尝试将 和 参数增加到适合您的开发环境的值:

spring:
  devtools:
    restart:
      enabled: true  # 开启自动重启,默认true
      quiet-period: 1500ms  # 保持 1.5 秒的静默期以确保没有其他类更改,默认是400ms
      poll-interval: 3000ms  # 每 3 秒轮询一次更改,默认是1s

我的电脑性能比较低,所以时间调整的高一些。IDEA在编译的时候会先删除原class,再把编译后的class放过去,如果这中间被devtools检测到了,应用会重启两次。

posted @ 2020-08-18 23:35  雨中遐想  阅读(275)  评论(0编辑  收藏  举报