springboot自动重启及SpringBoot Developer tools简介

本文介绍了SpringBootDevTools在项目中的应用,如类文件自动重启、热加载特性,以及如何通过配置文件或系统属性禁用其自动重启功能。同时提到默认属性值管理和优化开发体验的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中引用了SpringBoot Developer tools,修改类后会自动重启。

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

springboot developer tools的作用

用于提升开发体验,比如修改类文件自动重启、修改静态文件热加载、提供属性默认值、远程debug等。打包时,默认并不会将devleloper tools打入,除非禁用excludeDevtools

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludeDevtools>false</excludeDevtools>
            </configuration>
        </plugin>
    </plugins>
</build>

自动重启的原理

只要ClassPath有文件发生变化就会自动重启,自动重启的原理是,有一个BaseClassLoader加载library中的类,有一个RestartClassLoader加载开发的类,开发的类变更了,则创建新的RestartClassLoader加载开发类,丢弃老的RestartClassLoader;有时,修改了注释、加个空行、都自动重启,这是不合时宜的,而且使用intellij idea本身就会热加载,不需要重启(热加载和重启是不同的),禁用SpringBoot Developer tools的自动重启功能,有两个办法

  • 在application.yml或application.properties中配置spring.devtools.restart.enabled为false,这种RestartClassLoader仍然加载类,但不再监控类变化。

  • 在调用SpringApplication.run之前,配置System property完全禁用,这种就不会创建RestartClassLoader

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

顺便提一句,SpringBoot Developer tools还提供了默认的属性值,比如 template engines (FreeMarker、Thymeleaf、Mustache)默认会缓存编译文件以提高效率,但在开发阶段这是不合时宜的,所以SpringBoot Developer tools提供的spring.thymeleaf.cache是false,完整的属性默认值可参考DevToolsPropertyDefaultsPostProcessor.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值