在IDEA中使用Spring-boot-devtools进行热部署

本文详细介绍了Spring Boot的热部署工具Spring-boot-devtools的工作原理,如通过双类加载器实现快速重启。此外,它还对比了与商业工具JRebel的区别,如效率和成本。文章提供了配置Spring Boot热部署的步骤,并指导如何在IDEA中设置自动编译,确保代码修改后应用能自动重启。

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

1.简介

参考文档:Developing with Spring Boot

Spring-boot-devtools是Springboot中包含的一款额外的热部署工具。

其原理是通过使用两个类加载器(classloader)来工作,一个base classloader用于加载没有变化的类,比如第三方的jar包,另一个restart classloader 负责加载经常变化的文件,比如classpath中编写的class文件,每次应用重启的时候,restart classloader 就会被丢弃,重新创建一个新restart classloader 来加载classpath中的class文件,而base classloader则无需重新创建,这样就大大减少了启动时间。

Spring-boot-devtools触发重启条件:

  • 在eclipse中,保存修改文件会导致classpath中的文件更新,则会触发重启
  • 在IDEA中,构建项目,Build, Build Project都会触发重启
  • 使用构建插件,比如maven执行mvn compile或者gradle build都会触发重启

注意:对于resources目录中的一些静态文件修改则不会重启服务。但静态文件修改依旧会实时生效。

对比JRebel:

区别1:热重启VS热重载:

Srping-boot-devtools和JRebel最大的区别就是Srping-boot-devtools是热重启,而JRebel是热重载。简单来说Srping-boot-devtools每次变更类都会进行一次重启,而JRebel每次类发生变更只是将变更的类重新加载,因此在效率上JRebel会更快。

区别2:Srping-boot-devtools是免费使用的,JRebel是收费的

2. 环境:

  • SpringBoot 2.6.3
  • IDEA 2021.2.1

3. 配置步骤:

3.1 配置Sringboot

 修改POM.xml 加入spring-boot-devtools依赖

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

修改application.yml

spring:
  devtools:
    #热部署生效,默认就是true
    restart:
      enabled: true

然后启动服务进行测试。

测试步骤:

编写一个controller

@Api(tags = "Hello模块")
@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "hello David";
    }
}

修改返回值后看控制台是否重启生效,如果代码修改后没有重启,可能的问题是IDE没有设置自动编译功能,需要手动编译(build)一下,或者将IDE设置为自动编译。

3.2 设置IDEA自动编译

当我们修改了java类后,IDEA默认是不自动编译的,而spring-boot-devtools又是监测classpath下的文件发生变化才会重启应用,如果不想每次都点击build project就需要设置IDEA的自动编译

设置方法如下:

在Settings->Build,Excution,Deployment ->Compiler勾选Build project automatically

然后在Settings->Advanced Settings中勾选下面的选项

### 配置 Spring Boot DevTools 实现热部署 为了使 Spring Boot 应用程序能够支持热部署,需按照如下方式配置: #### Maven 或 Gradle 中引入依赖 在项目的构建文件中加入 `spring-boot-devtools` 依赖项。对于基于Maven的项目,在pom.xml 文件内添加以下片段[^4]: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> ``` 而对于采用Gradle作为构建工具的情况,则应在build.gradle里声明相应的依赖关系。 #### 修改 application.properties 或者 application.yml 文件 为了让应用程序响应代码更改而自动重启,可以在application.properties (或 .yml) 文件中指定相关属性来启用此功能: ```properties # 开启热部署 spring.devtools.restart.enabled=true # 设置额外监控路径,默认为 classpath 下方所有资源;这里指定了 Java 源码所在位置 spring.devtools.restart.additional-paths=src/main/java # 排除不需要触发重启操作的特定目录,比如静态资源文件夹 spring.devtools.restart.exclude=static/** ``` 另外还可以调整其他一些参数以优化性能表现,例如关闭模板引擎缓存以便即时反映视图层的变化[^5]: ```properties # 页面不产生缓存,及时更新 spring.thymeleaf.cache=false # 启用内容协商策略处理静态资源版本管理 spring.resources.chain.strategy.content.enabled=true spring.resources.chain.strategy.content.paths=/\** ``` #### 调整 IDE 设置 如果使用的是 IntelliJ IDEA 进行开发工作,那么还需要做一些必要的环境设定才能让热部署正常运作。具体来说就是确保编译器选项中的 "Build project automatically" 已被激活,并且开启了 Power Save Mode 关闭状态[^3]。 完成上述步骤之后,每当源代码发生变动时,Spring Boot DevTools 就会检测到这些变化并立即执行相应动作——无论是重新加载受影响的部分还是完全重启整个应用实例,从而大大提高了迭代速度和调试效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值