springboot热部署

springboot热部署

springboot热部署是什么

Spring Boot 热部署是开发阶段提升代码迭代效率的核心特性,主要通过引入 spring-boot-devtools 开发工具模块实现,指在应用持续运行过程中,修改自研的业务代码、配置文件或静态资源后,无需手动停止并全量重启整个应用,仅对修改的项目代码快速重启的机制。

核心实现原理

Spring Boot DevTools 采用类加载器分层策略实现应用的按需重启,核心是将应用的类加载器划分为两个独立层级,以此规避全量重启带来的性能损耗,具体机制如下:

类加载器分层定义

  • 基础类加载器(Base ClassLoader):该类加载器负责加载应用运行所依赖的第三方库及 Spring Boot 核心类库,此类资源在开发阶段极少发生变更,因此一旦加载完成便会被永久缓存,不会随业务代码的修改重新加载。
  • 重启类加载器(Restart ClassLoader):该类加载器专门负责加载项目自研的业务代码、配置文件以及静态资源,这类资源是开发过程中高频修改的内容,也是按需重启机制的核心作用对象。

文件变更触发的按需重启流程

当 DevTools 监测到应用类路径(Maven 项目对应 "项目根目录 /target/classes" 目录)下的文件发生变更时,会按以下流程执行按需重启:

  1. 销毁当前运行的 Restart ClassLoader 实例,释放其加载的所有业务层类资源;
  2. 重新创建一个全新的 Restart ClassLoader 实例,加载类路径下最新的业务代码、配置文件及静态资源;
  3. 重启 Spring 应用上下文(ApplicationContext),该过程仅针对业务层上下文执行重启操作,Base ClassLoader 及其加载的第三方依赖、Spring Boot 核心类库保持原有状态,不会重新加载。

上述按需重启流程仅涉及业务层资源的重新加载与上下文重启,整体耗时通常仅数百毫秒,而全量重启需重新加载所有依赖,耗时远高于按需重启,因此该分层策略可显著提升开发阶段的代码迭代效率。

演示案例

引入依赖

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

代码如下

java 复制代码
package com.qcby.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldSpringBootMain {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldSpringBootMain.class, args);
    }

}
java 复制代码
package com.qcby.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

启动后的效果如下

修改java代码或者配置文件模板后通过按 ctrl+f9 来实施热部署

相关推荐
杜子不疼.15 分钟前
计算机视觉热门模型手册:Spring Boot 3.2 自动装配新机制:@AutoConfiguration 使用指南
人工智能·spring boot·计算机视觉
indexsunny2 小时前
互联网大厂Java求职面试实战:Spring Boot微服务与Redis缓存场景解析
java·spring boot·redis·缓存·微服务·消息队列·电商
无心水2 小时前
【分布式利器:腾讯TSF】7、TSF高级部署策略全解析:蓝绿/灰度发布落地+Jenkins CI/CD集成(Java微服务实战)
java·人工智能·分布式·ci/cd·微服务·jenkins·腾讯tsf
28岁青春痘老男孩7 小时前
JDK8+SpringBoot2.x 升级 JDK 17 + Spring Boot 3.x
java·spring boot
方璧7 小时前
限流的算法
java·开发语言
元Y亨H7 小时前
Nacos - 服务注册
java·微服务
曲莫终8 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
天若有情6738 小时前
校园二手交易系统实战开发全记录(vue+SpringBoot+MySQL)
vue.js·spring boot·mysql
一心赚狗粮的宇叔8 小时前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#
while(1){yan}8 小时前
MyBatis Generator
数据库·spring boot·java-ee·mybatis