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

相关推荐
m0_587383002 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·2 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
代码不停3 小时前
自动化测试(java)
java·开发语言·selenium·自动化
行百里er3 小时前
Redis 完结篇——Redis 热点问题在 Spring Boot 项目中实战
redis·后端
高频因子挖掘机4 小时前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
鬼手点金5 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
孟健5 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
paopaokaka_luck5 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
SL_staff6 小时前
JVS混合架构实践:能力引擎+动态模型如何支撑企业级可持续交付
spring boot·低代码·全栈
码事漫谈6 小时前
丢得静悄悄,谈一谈 Agent 的记忆是怎么没的
后端