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 来实施热部署

相关推荐
十二同学啊4 分钟前
Python 工程化详解:项目结构、依赖管理、代码质量、测试与部署
java·开发语言·python
打工仔折腾 AI5 分钟前
鸿蒙移动端直连 Windows 远程桌面配置与性能调优实践
人工智能·windows·后端·python·华为·性能优化·harmonyos
YIN_尹8 分钟前
【git原理与使用】git基本操作及底层原理(一)
java·git·elasticsearch
程序员飞哥18 分钟前
AI 编程额度怎么用才不浪费?
java·前端·后端
二月夜18 分钟前
Redis 高频面试题全解:缓存三大问题、大 key 治理与分布式锁之争(2026 招聘 JD 真题复盘)
redis·分布式·后端·缓存
yh弓长23 分钟前
Spring MVC 的请求链路
java·spring·mvc
拆房老料24 分钟前
【第四部分:Agentic 智能体设计模式】17. Agent 路由模式详解:从意图识别到动态模型选择
java·设计模式·ai编程·策略模式
IT_陈寒34 分钟前
Vite开发实战:从入门到精通
前端·人工智能·后端
樱花落木兰36 分钟前
Redis 消息队列的可靠性演进:从 List、Pub/Sub 到 Stream 消费者组,以及 8.x 版本改变了什么
java·开发语言·经验分享·redis·分布式·python·软件工程
学长毕设40 分钟前
基于SpringBoot的文具商城在线零售系统-附源码
spring boot·后端·零售