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

相关推荐
小蒜学长2 分钟前
“喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·宠物
程序员黑豆3 分钟前
Java字符串常量池完全指南:原理、intern()方法与性能优化最佳实践
java·前端·ai编程
AI人工智能+电脑小能手6 分钟前
大白话说Java设计模式-14-适配器模式(业务实战篇)
java·设计模式·适配器模式·系统兼容·多渠道对接
SomeB1oody8 分钟前
【RustyML入门】3.7. 循环层
开发语言·后端·机器学习·rust·教程
xbgRS3 小时前
springboot的自动装配
java·spring boot
东风破_10 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
嘻哈∠※10 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
卷无止境10 小时前
在 awesome-fastapi 里,哪些库值得一看?
后端·python
白狐_79811 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25811 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法