本文作者:DurkBlue

利用Spring Boot devtools依赖实现SpringBoot项目的热启动(随时调试代码,随时页面看到效果)推荐

DurkBlue 2023-07-19 757
利用Spring Boot devtools依赖实现SpringBoot项目的热启动(随时调试代码,随时页面看到效果)摘要: 1、devtools简介        Spring Boot 提供了一组开发工具 spring-boot-devtools 可以提高开发者...

1、devtools简介

        Spring Boot 提供了一组开发工具 spring-boot-devtools 可以提高开发者的工作效率,开发者可以将该模块包含在任何项目中,spring-boot-devtools 最方便的地方莫过于热部署了。

2、devtools 实战

2.1 基本用法

    要想在项目中加入 devtools 模块,只需添加相关依赖即可,代码如下:


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


注意:这里多了 一个 optional 选项,是为了防止将 devtools 依赖传递到其他模块中。当开发者将应用打包运行后,devtools 会被自动禁用,当开发者将 spring-boot-devtools 引入项目后,只要 classpath 路径下发生变化,项目就会自动重启,这极大地提高了项目的开发速度。

    如果开发者使用 Eclipse ,那么在修改完代码并保存之后,项目将自动编译井触发重启,而开发者如果使用 IntelliJIDEA 默认情况下,需要开发者手动编译才会触发重启。手动编译时,单击 Build -> Build Project 菜单或者按 Ctrl+F9 快捷键进行编译,编译成功后就会触发项目重启。当然,使用 IntelliJ IDEA 开发者也可以配置项目自动编译,配置步骤:


单击 File -> settings 菜单,打开 settings 页面,在左边的菜单栏依次找到 Build,Execution,Deployment -> Compile,勾选 Build project automatically


利用Spring Boot devtools依赖实现SpringBoot项目的热启动(随时调试代码,随时页面看到效果)  第1张


以下的步骤成为一个分水岭。如果是idea2021以前的版本,执行下面步骤


按住Ctrl+Shift+Alt+/ 快捷捷键调出 Maintenance 页面


利用Spring Boot devtools依赖实现SpringBoot项目的热启动(随时调试代码,随时页面看到效果)  第2张


选择 Registry,在新打开的 Registry 页面中,勾选compiler.automake.allow.when.app.running 复选框。配置完成后,若开发者修改了代码则将会自动重启。


利用Spring Boot devtools依赖实现SpringBoot项目的热启动(随时调试代码,随时页面看到效果)  第3张


注意:classpath 路径下的静态资源或者视图模板等发生变化时,并不会导致项目重启。


如果是idea2021(包含2021),则执行下面步骤


按住ctrl+alt+s,进入设置,然后选择高级设置,在Compiler下勾选 Allow auto-make to restart even if developed application is currently running。 大功告成。enjoy。若解决了您的问题,别忘点个赞。


利用Spring Boot devtools依赖实现SpringBoot项目的热启动(随时调试代码,随时页面看到效果)  第4张


2.2 基本原理

        Spring Boot 使用的自动重启技术涉及两个类加载器, 一个是 baseclassloader ,用来加载不会变化的类,例如项目引用的第三方的 jar ;另一个是 restartclassloader ,用来加载开发者自己写的会变化的类。当项目需要重启时, restartclassloader 将被一个新创建的类加载器代替,而 baseclassloader则继续使用原来的,这种启动方式要比冷启动快很多,因为 baseclassloader 已经存在井且已经加载好。


2.3 自定义监控资源

        默认情况下,/META-INF/maven、/MET A-INF/resources、/resources、/static 、/public 以及 /templates位置下资源的变化并不会触发重启,如果开发者想要对这些位置进行重定义 ,

在 application.properties 中添加如下配置即可:


spring.devtools.restart.exclude=static/**



这表示从默认的不触发重启的目录中除去 static 目录,即 classpat:static 目录下的资源发生变化时也会导致项目 重启。用户也可以反向配置需要监控的目录,配置方式如下:


spring.devtools.restart.additional-exclude=src/main/resources/static



这个配置表示当 src/main/resources/static 目录下的文件发生变化时,自动重启项目。由于项目的编码过程是一个连续的过程,并不是每修改一行代码就要重启项目,这样不仅浪费电脑性能,而且没有实际意义。鉴于这种情况,

开发者也可以考虑使用触发文件,触发文件是个特殊的文件,当这个文件发生变化时项目就会重启,配置方式如下:

spring.devtools.restart.trigger-file=.trigger-file


在项目 resources 目录下新建一个名为.trigger-file 的文件,此时当开发者修改代码时,默认情况下项目不会重启,需要项目重启时,开发者只需要修改 .trigger-file 文件即可,但是注意,如果项目没有改变,只是单纯地改变了 .trigger-file 文件,那么项目不会重启。


2.4 使用 LiveReload

        因为静态资源目录下的文件变化以及模板文件的变化不会引发重启,虽然开发者可以通过修改配置改变这一默认情况,但实际上并没有必要,因为静态文件不是 class。devtools 默认嵌入了 LiveReoad 服务器,可以解决静态文件的热部署, LiveReload 可以在资源发生变化动触发浏览器更新,LiveReoad 支持 Chrome、Firefox、Safari,以Chrome 为例,在 Chrome 应用商店搜索 LiveReload 并添加到扩展程序。

        在浏览器中打开项目的页面,然后单击浏览器右上角的 LiveReload 按钮,开启LiveReload 连接,此时当静态资源发生改变时,浏览器就会自动加载。如果开发者不想使用这一特性,可通过如下配置关闭:

spring.devtools.livereload.enabled=false

注意:建议开发者使 LiveReload 策略而不是项目重启策略来实现静态资源的动态加载,因为项目重启所耗费的时间一般要超过 LiveReload

2.5 禁用自动重启

    如果开发者添加了 spring-boot-devtools 依赖但是不想使用自动重启特性,那么可以关闭自动重启。


spring.devtools.restart.enabled=false


也可以使用代码来控制:


@SpringBootApplication
public class DevToolsApplication {
    public static void main(String[] args) {
        System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(DevToolsApplication.class, args);
    }
}




这篇文章由DurkBlue发布,转载请注明来处
文章投稿或转载声明

来源:DurkBlue版权归原作者所有,转载请保留出处。本站文章发布于 2023-07-19
温馨提示:文章内容系作者个人观点,不代表DurkBlue博客对其观点赞同或支持。

赞(0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享