当前位置: 首页 > news >正文

【第七篇】 SpringBoot项目的热部署

简介

        本文介绍了热部署(Hot Deployment)的概念、使用场景及在IDEA中的配置方法。热部署可在不重启应用的情况下动态更新代码,提升开发效率,适用于调试、微服务架构和自动化测试等场景。文章详细说明了热部署的实现步骤(导入坐标、快捷键触发),区分了Restart(加载自定义代码)和ReLoad(加载jar包)的差异,并提供了自动热部署的设置方法(通过IDEA配置或快捷键激活)。此外,还列举了默认不触发热部署的目录及如何手动配置排除目录,最后提到可通过属性关闭热部署功能。文章内容若存在错误或需改进的地方,欢迎大家指正!若对操作有任何疑问欢迎留言!非常感谢!

目录

一、热部署简介及场景

1、简介

2、典型场景

二、热部署的使用

1、导入坐标

2、使用

3、关于热部署

4、示例

三、自动热部署

1、使用步骤

2、激活方式

四、热部署相关配置

1、设置不触发热部署的目录

2、关闭热部署功能


一、热部署简介及场景

1、简介

        热部署(Hot Deployment)是指在不重启应用的情况下,动态更新代码、资源或配置,使修改立即生效。通常用于开发环境,可以显著提升开发效率,避免频繁重启应用。

2、典型场景

  • 修改代码后无需手动重启,直接看到效果(如调试接口、修复 Bug)
  • 在微服务架构中,重启单个服务可能依赖其他服务,热部署避免连锁重启。
  • 在自动化测试环节,热部署可减少部署时间,加速反馈循环。

二、热部署的使用

1、导入坐标

2、使用

        在项目运行时不用停止,直接点击Build Project或者使用快捷键Ctrl + F9,即可完成热部署。

3、关于热部署

  • 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置为restart类加载器
  • 重载(ReLoad):jar包,加载位置为base类加载器

        热部署功能仅仅代表Restart的过程而不包含ReLoad的过程,而程序在第一次启动的时候既包含Restart过程又包含ReLoad过程。也就是说热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源。

4、示例

修改前

修改并热部署后

三、自动热部署

        若不想点击Build Project或者使用快捷键Ctrl + F9,那么也是可以在IDEA中设置自动热部署功能的。

        前提:已导入devtools坐标

1、使用步骤

        第一步,在file-settings中的Comoiler中设置自动构建项目

        第二步、在file-settings中的Advanced Settings中搜索compiler,然后将下面这个选项勾选上。

        也可以在IDEA页面上使用快捷键Ctrl+Alt+Shift+/,然后点击Registry,然后找到这个选项。

2、激活方式

        由此便开启了IDEA自动热部署的设置,激活方式是当IDEA失去鼠标焦点5秒之后就会热部署一次,测试方式是可以修改代码,然后打开浏览器倒数5秒就能发现控制台已经重启。

四、热部署相关配置

1、设置不触发热部署的目录

默认不触发热部署的目录

  • /META-INF/maven
  • /META-INF/resources
  • /resource
  • /static
  • /public
  • /templates

        虽然这里排除了resources目录,但是配置文件还是会正常参数热部署的。因为这些目录一般会用于存放静态文件,而配置文件虽然在resources目录下,但配置文件却是核心文件,所以devtools做了默认处理,于是配置文件还是会正常参与热部署。

        手动设置不参于热部署的目录,只需要在配置文件中配置指定目录的通配符即可

2、关闭热部署功能

        只需要将spring.devtools.restart.enabled的属性设置为false即可

上一篇——》【第六篇】 SpringBoot的日志基础操作https://blog.csdn.net/qq1743177790/article/details/148497495

相关文章:

  • 基于SpringBoot解决RabbitMQ消息丢失问题
  • 嵌入:AI 的翻译器
  • 64、js 中require和import有何区别?
  • 解决MySQL8.4报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded
  • 深入理解 Agent 与 LLM 的区别:从智能体到语言模型
  • 为什么React列表项需要key?(React key)(稳定的唯一标识key有助于React虚拟DOM优化重绘大型列表)
  • 接口不是json的内容能用Jsonpath获取吗,如果不能,我们选用什么方法处理呢?
  • K8S认证|CKS题库+答案| 5.日志审计
  • 动端React表格组件:支持合并
  • ThinkPHP 5.1 中的 error 和 success 方法详解
  • Java高级 | 【实验七】Springboot 过滤器和拦截器
  • 【win | 自动更新关闭】win11
  • 从0开始学习R语言--Day19--连续变量的相关性检验
  • 基于功能基团的3D分子生成扩散模型 - D3FG 评测
  • C++2025.6.7 C++五级考题
  • 行为设计模式之Command (命令)
  • 鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
  • 【单源最短路经】Dijkstra 算法(朴素版和堆优化版)、Bellman-Ford 算法、spfa 算法 及 负环判断
  • 数据结构算法(C语言)
  • 从golang的sync.pool到linux的slab分配器
  • 郑州哪有做网站的汉狮/怎么发外链
  • 做网站的方法/百度开户联系方式
  • 怎么看出是模板网站/推广自己产品的文案
  • 网站建设内部问卷/百度站长工具怎么关闭
  • 自适应网站一般做几个尺寸/优秀网站设计案例
  • 3d云打印网站开发/商业软文怎么写