【热部署】✈️Springboot 项目的热部署实现方式

news2024/7/7 16:30:01

目录

🍸前言

🍻一、热部署和手动重启

🍺二、热部署的实现

        2.1 手动启动热部署

        2.2 自动检测热部署

        2.3 关闭热部署

💞️三、章末


🍸前言

        小伙伴们大家好,书接上文,通过Springboot 中的 actuator 工具实现实时获取服务的线程转储,内存使用占比,可以完成动态监测服务的运行情况以及遇到异常时问题的排查等;在本地开发的时候,调试到问题小小修改之后需要重新启动服务,次数少还好,如果多的话也是十分耗时;Springboot 框架针对这方面可以集成热部署的工具,实现代码运行时动态加载修改的文件;之前的actuator 文章链接如下:

【SpringBoot Actuator】⭐️Actuator 依赖实现服务健康检查,线程信息收集-CSDN博客

🍻一、热部署和手动重启

热部署手动重启
定义不停止整个服务的情况下,动态地更新正在运行的代码或资源文件停止当前运行的服务,然后再重新启动整个应用程序,加载更新后的代码和配置
特点使用热部署可以在应用程序运行期间进行代码修改,这些修改可以即时反映到运行中的应用程序中,从而加快了开发和调试的效率手动重启服务会导致应用程序在重启期间无法提供服务,有一定的停机时间,同时也会中断用户正在进行的操作
适用场景主要用于开发和调试阶段,能够快速看到修改的效果,减少了重启服务的时间开销手动的场景就不多说了,生产环境一般都是要手动重启的

🍺二、热部署的实现

        环境准备:准备一个简单的可以启动的 Springboot 项目即可

        2.1 手动启动热部署

               2.1.1 依赖引入

                在 pom.xml 文件中加入以下代码,然后刷新 maven 自动下载依赖

注:如果 maven 刷新过慢,或者下载失败,可以手动替换下载路径为国内阿里云镜像,具体操作上篇 Actuator 文章里有提到,较简单

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.7.12</version>
            <optional>true</optional>
        </dependency>

                2.1.2 激活热部署

                这里点击这两个快捷按钮或者使用快捷键 ctrl + F9 即可启动

                2.1.3 测试

                 测试修改后返回的字符串值会不会热更新,修改项目后 build 下,确实是重新加载了

 

        也就是使用 1 按钮,省去2 3 的重启 

        2.2 自动检测热部署

                如果不想每次修改代码后都手动 build ,可以配置 IDEA 中的一些检测工具实现每次修改后触发重新加载(重新请求下接口触发或者监测焦点移除代码区域后5秒触发)

                2.2.1 自动配置

                勾选自动构建项目选项(默认是不勾选的)

                        快捷键 Ctrl + alt + shift + / 打开 如下页面,点击第一个 Registry ,勾选这一条,点击colse 即可

                 

                 2.2.2 测试

                修改后的第一次请求会触发自动加载(或者修改后失去焦点5秒后出发),后续请求的结果就是修改后的了

        2.3 关闭热部署

        通过配置文件中指定是否使用热部署

💞️三、章末

        热部署可以实现本地开发的加速,减少在每次修改后重启服务花费的时间,可以将更多的精力放在代码层面,但是在生产环境下还是优先人工重启服务;

        文章到这就结束了~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1880166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】已解决:IndexError: list index out of range

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;IndexError: list index out of range 一、分析问题背景 在Python编程中&#xff0c;IndexError: list index out of range 是一个常见的错误。这个错误通常出现…

【Python从入门到进阶】59、Pandas库中Series对象的操作(二)

接上篇《58、Pandas库中Series对象的操作(一)》 上一篇我们讲解了Pandas库中Series对象的基本概念、对象创建和操作&#xff0c;本篇我们来继续学习Series对象的运算、函数应用、时间序列操作&#xff0c;以及Series的案例实践。 一、Series对象的运算 1. 数值型数据的算术运…

基于JSP的体育竞赛成绩管理系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#xff1a;MyEclipse, Tomcat, MySQL 系统展示 首页 管理…

Windows Ternimal

Windows Ternimal 安装 Windows 终端概述 | Microsoft Learn wt --help在当前目录打开 lextm/windowsterminal-shell: Install/uninstall scripts for Windows Terminal context menu items 打开指定目录 wt -d %USERPROFILE% ohmyposh 美化 1 安装 2 添加 ohmyposh bin…

数字签名解析

1. 概述 数字签名不是手写签名的数字图像&#xff1b; 数字签名是一种可以提供认证的加密形式&#xff0c;是转向完全无纸环境的一个途径&#xff1b; 数字签名机制用以解决伪造、抵赖、冒充和篡改、完整性保护等安全问题。 2. 公钥密码与数字签名的关系 要实现数字签名&#…

【python爬虫实战】爬取豆瓣top250(网站有反爬虫机制肿么办)

关于请求头headers: 值得注意的是&#xff0c;与上一篇 &#xff1a;​​​​​​【python爬虫实战】爬取书店网站的 书名&价格&#xff08;注释详解&#xff09;-CSDN博客 爬取书名不同&#xff0c;这次爬取豆瓣网站必须使用“请求头headers”&#xff0c;不然将没有输…

SSM学习2:依赖注入、依赖自动装配、集合注入、加载properties文件

依赖注入 依赖注入方式 setter注入——引用类型 setter注入——简单类型 public class BookDaoImpl implements BookDao {public void setDatabaseName(String databaseName) {this.databaseName databaseName;}public void setNum(int num) {this.num num;}private Stri…

【图像超分辨率】一个简单的总结

文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率&#xff1f;2 图像超分辨率通常有哪些方法&#xff1f;&#xff08;1&#xff09;基于插值的方法&#xff08;2&#xff09;基于重建的方法&#xff08;3&#xff09;基于学习的方法&#xff08;LR im…

jenkins 发布服务到linux服务器

1.环境准备 1.1 需要一台已经部署了jenkins的服务器&#xff0c;上面已经集成好了&#xff0c;jdk、maven、nodejs、git等基础的服务。 1.2 需要安装插件 pusblish over ssh 1.3 准备一台额外的linux服务器&#xff0c;安装好jdk 2.流程描述 2.1 配置jenkins&#xff0c;包括p…

统计是一门艺术(参数假设检验)

1.参数假设检验 在总体分布已知的情况下&#xff0c;对分布中未知参数的检验。 &#xff08;1&#xff09;相关基本概念 零假设/原假设与对立假设/备择假设&#xff1a; 任务&#xff1a;根据样本作出是否接受H0 复合假设与简单假设&#xff1a; 否定域/拒绝域与接受域&…

Python:谈谈常规滤波器(带通、低通、高通、带阻)的用法

一、滤波器的作用 滤波器在信号处理中用于移除或减少信号中的噪声&#xff0c;同时保持信号的某些特性。滤波器通常用于音频、视频和图像处理等领域。滤波器根据其 designed for different purposes and can be divided into several types, such as lowpass filters, highpass…

【Unity设计模式】✨使用 MVC 和 MVP 编程模式

前言 最近在学习Unity游戏设计模式&#xff0c;看到两本比较适合入门的书&#xff0c;一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式&#xff0c;因此很值得学习 本…

Linux rpm与yum

一、rpm包管理 rpm用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具&#xff09;的缩写&#xff0c;类似windows的setup.exe&#xff0c;这一文件格式名称虽然打上了R…

Python pip install模块时C++编译环境问题

pip install模块时C编译环境问题 在接触和使用python后&#xff0c;常常会通过pip install命令安装第三方模块&#xff0c;大多数模块可以直接安装&#xff0c;但许多新同学仍会遇见某些模块需要实时编译后才能安装&#xff0c;如报错信息大概是缺乏C编译环境&#xff0c;本文则…

Golang-GMP

GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的&#xff0c;为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的&#xff0c;为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率&#xff0c;但多进程、多线程都存在局限性。比如多进程通过时…

Python变量的命名规则与赋值方式

第二章&#xff1a;Python 基础语法 第一节&#xff1a;变量的命名规则与赋值方式 2.1.1 引言 在编程中&#xff0c;变量是存储数据的基本单元。变量的命名和赋值是编程语言中表达和操作数据的基础。了解和遵循变量命名规则对于编写清晰、可维护的代码至关重要。 2.1.2 变量…

嵌入式Linux系统编程 — 5.2 Linux系统时间与日期

目录 1 了解Linux系统时间 1.1 几种常用的时间 1.2 如何查看几种常用的时间 1.3 Linux 系统中的时间 2 time、gettimeofday获取时间 2.1 time函数 2.2 ​​​​​​​gettimeofday函数&#xff1a; 2.3 示例程序 3 时间转换函数 3.1 ctime与ctime_r函数 3.2 localti…

小白学python(第四天)顺序与分支篇

这几天因为个人原因&#xff0c;python篇会更新比较慢&#xff0c;还望大家谅解&#xff0c;那么废话不多说&#xff0c;我们现在就进入正题 顺序篇 这个没啥好说的&#xff0c;就是自上而下&#xff0c;依次执行 分支篇 条件&#xff08;if&#xff09;语句语法格式&#…

Listary(Windows 文件搜索工具)专业版值得购买吗?

说到经典的国货软件&#xff0c;有一款 Win 软件是一定绕不过去的。它就是知名的本地文件搜索工具 Listary&#xff01; 便捷的文件搜索窗口&#xff1b;快捷操作的体验&#xff1b;与系统更匹配的外观设计&#xff1b;更智能的排序和更可靠的索引。 便捷的文件搜索窗口 紧凑…

百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现

百亿级存储架构&#xff1a; ElasticSearchHBase 海量存储架构与实现 尼恩&#xff1a;百亿级数据存储架构起源 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;经常性的指导小伙伴们改造简历。 经过尼恩的改造之后&#xff0c;很多小伙伴拿到了一线互联网企业如得物、阿…