SpringBoot实现热部署/加载
在我们修改完项目代码后希望不用重启服务器就能把项目代码部署到服务器中(也就是说修改完项目代码后不用重启服务器修改后的项目代码就能生效)。
一、实现devtools原理
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>
spring-boot-devtools从名称就可以看出来,是开发者工具包,其主要的功能就是实现热加载。其实现原理就是两个ClassLoader,一个负责加载那些不会经常改变的文件,比如:第三方jar包,一旦引入项目之后这部分代码在调试过程中就处于不变的状态;一个负责加载可能经常改变的类,比如我们自己在项目中写的代码,被称为restart ClassLoader。当有代码发生改变的时候,重建一个restart ClassLoader,原有的restart ClassLoader被丢掉。由于每次重新加载的内容较少,所以速度比手动重启更快一些。
二、实现步骤
①、首先,使用:“Shift+Ctrl+Alt+/” ,选择 “Registry” ,选中打勾 “compiler.automake.allow.when.app.running” 。

但是,发现 compiler.automake.allow.when.app.running 并没有找到这个选项。

原来,在 IDEA 2023 版本这个选项的配置,改到设置-高级设置模块了。ctrl+alt+s,进入设置,然后选择高级设置,在Compiler下勾选 Allow auto-make to restart even if developed application is currently running。,然后再进入 设置 ==> Build,Execution,Deployment ==> Compiler,勾选 Build project automatically。


②、添加这段代码后,重启IDEA ,然后再重启程序应用。
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork> <!--dev-tools相关--><skip>true</skip> <!--否则模块打包时候会提示 unable to find main class--><addResources>true</addResources></configuration></plugin></plugins></build>
③、实在不行,还可以尝试修改一下application.properties配置(当然一般情况下,不用走到这一步,就可以完成热部署)通常程序运行不生效的原因有两种:
- JDK编译版本和运行版本不统一,自行学习一下IDEA环境下JDK配置
- 浏览器缓存或者其他的缓存软件导致的问题
#热加载生效
spring.devtools.restart.enabled=true
#额外新增的热加载目录
spring.devtools.restart.additional-paths= src/main/java
#热加载排除目录
#spring.devtools.restart.exclude=
④、最后建议你去浏览器插件商店安装一个插件叫做LiveReload。

Spring devtools默认会启动一个 Live Reload Server实例监听文件的变化。并实时与浏览器插件通信更新浏览器展示界面。就不用每次更改内容之后都点击浏览器刷新按钮了。
三、补充说明
最次如果还不行(那就执行手动热加载),我们直接入devtools坐标后将修改后的项目Build(Ctrl+F9)一下,就可以把修改后的项目部署到服务器中了(目的和重启服务器一样了)
当然,如果要关闭热部署的话,可以尝试:
devtools:restart:exclude: static/** , public/** ,config/application.ymlenabled: false
# /** 表示此目录下的所有文件
# config/application.yml 已经具体到哪个目录下的哪个文件
或者在springboot启动类当中输System.setProperty("spring.devtools.restart.enabled","false");即可关闭热部署功能。
@SpringBootApplication
public class Springboot12HotDisplayApplication {public static void main(String[] args) {System.setProperty("spring.devtools.restart.enabled","false");SpringApplication.run(Springboot12HotDisplayApplication.class, args);}}相关文章:
SpringBoot实现热部署/加载
在我们修改完项目代码后希望不用重启服务器就能把项目代码部署到服务器中(也就是说修改完项目代码后不用重启服务器修改后的项目代码就能生效)。 一、实现devtools原理 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-…...
我是如何使用Spring Retry减少1000 行代码
使用 Spring Retry 重构代码的综合指南。 问题介绍 在我的日常工作中,我主要负责开发一个庞大的金融应用程序。当客户发送请求时,我们使用他们的用户 ID 从第三方服务获取他们的帐户信息,保存交易并更新缓存中的详细信息。尽管整个流程看起来…...
ARM开发(stm32 cortex-A7核IIC实验)
1.实验目标:采集温湿度传感器值; 2.分析框图(模拟IIC控制器); 3.代码; ---iic.h封装时序协议头文件--- #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "st…...
「Java」《Java集合框架详解:掌握常用集合类,提升开发效率》
Java集合框架详解:掌握常用集合类,提升开发效率 摘要:一. 引言二. 集合框架概述三. 集合接口详解四. 集合类的选择五. 泛型和类型安全六. 集合的线程安全七. 高级集合类和算法八、Java集合实践操作示例1. 创建和初始化集合:2. 遍历…...
游戏出海需知:Admob游戏广告变现策略
越来越多的出海游戏公司更加重视应用内的广告变现,而 AdMob因为其提供的丰富的广告资源,稳定平台支持,被广泛接入采用。 Admob推出的广告变现策略包括bidding、插页式激励视频、开屏广告、各种细分功能的报告等等。 一、Bidding 竞价策略 …...
【linux】NFS调试总结
文章目录 00. ENV10. 简述20. 下载、安装、配置30. 使用1. 从uboot中设置NFS启动文件系统2. 调试 80. 问题1. NFS版本不匹配问题 90. 附件91. 服务端NFS配置项简述 00. ENV ubuntn1804 10. 简述 百度百科:https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E6%96%87…...
wireshark进行网络监听
一、实验目的: 1)掌握使用CCProxy配置代理服务器; 2)掌握使用wireshark抓取数据包; 3)能够对数据包进行简单的分析。 二、预备知识: 包括监听模式、代理服务器、中间人攻击等知识点…...
时间复杂度
一、时间复杂度 时间复杂度是计算机科学中用来衡量算法运行时间随输入规模增加而增长的速度。简单来说,它是一个衡量算法执行效率的指标,表示算法运行所需时间与输入数据量之间的关系。 时间复杂度通常用大O符号(O)来表示&#…...
Unity实现广告滚动播放、循环播放、鼠标切换的效果
效果: 场景结构: 特殊物体:panel下面用排列组件horizent layout group放置多个需要显示的面板,用mask遮罩好。 using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; using Unity…...
LangChain + Streamlit + Llama:将对话式AI引入本地机器
推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 什么是LLMS? 大型语言模型 (LLM) 是指能够生成与人类语言非常相似的文本并以自然方式理解提示的机器学习模型。这些模型使用包括书籍、文章、网站和其他来源在内的…...
Python 读写 Excel 文件库推荐和使用教程
文章目录 前言Python 读写 Excel 库简介openpyxl 处理 Excel 文件教程pandas 处理 Excel 文件教程总结 前言 Python 读写 Excel 文件的库总体看还是很多的, 各有其优缺点, 以下用一图总结各库的优缺点, 同时对整体友好的库重点介绍其使用教程…...
“深入解析JVM:理解Java虚拟机的工作原理和优化技巧“
标题:深入解析JVM:理解Java虚拟机的工作原理和优化技巧 摘要:本文将深入探讨Java虚拟机(JVM)的工作原理和优化技巧。我们将从JVM的基本结构开始,逐步介绍其工作原理,并提供一些实际示例代码&am…...
解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题
如果使用SES调试NRF52840的时候发现,官方例程只能显示CPU寄存器,但是无法显示外设寄存器时,解决办法如下: 1.在解决方案右键→Options→Debug→Debugger,然后Target Device选择正确的型号。 2.Register Definition Fil…...
Oracle-day1:scott用户、查询、取整、截取、模糊查询、别名——23/8/23
整理一下第一天软件测试培训的知识点 1、scott用户 -- 以system管理员登录锁定scott用户 alter user scott account lock;-- 以system管理员登录解锁scott用户 alter user scott account unlock;-- 以system管理员用户设置scott用户密码 alter user scott identfied by tiger…...
stm32之3.key开关
假设key电阻为40kΩ,则key0 的电压3.3v*4/52.64v 2.key开关代码 ② GPIO_OType_PP//推挽输出 GPIO_OType_PP//开漏输出 推挽输出是指输出端口可以同时提供高电平和低电平输出,而开漏输出则是指输出端口只能提供低电平输出,高电平时需要借…...
GPT带我学-设计模式-代理模式
什么是代理模式 代理模式(Proxy Pattern)是设计模式中的一种结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。 代理模式有三个主要角色:抽象主题(Subject)、真实主题(Real Subje…...
VMware Workstation Pro 无法使用开机状态下拍的快照来克隆虚拟机,怎么解决?
环境: VMware Workstation Pro16.0 Win10 专业版 问题描述: VMware Workstation Pro有台虚拟机在开机状态下拍了个6.7快照这个win10初始版,现在想在这个快照下直接克隆,无法使用开机状态下拍的快照创建克隆 解决方案: 1.关闭当前虚拟机 2.到虚拟机文件夹复制一份Wind…...
【JAVA】XML及其解析技术、XML检索技术、设计模式
XML XML(Extensible Markup Language)是可扩展标记语言的缩写,它是一种数据表示格式,可以描述复杂的数据结构,常用于传输和存储数据 作用: 用于进行存储数据和传输数据作为软件的配置文件 第一行是文档声明 <?xml version&q…...
Ansible 自动化安装软件
例子如下: 创建一个名为/ansible/package.yml 的 playbook : 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上 将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上 将 dev 主机组中主机上的所有软件包更新为最新版本 --- - name:…...
简单介绍 React Native 整合 Formik 实现表单校验
Formik 是 React 和 React Native 开源表单库,Formik 负责处理重复且烦人的事情——跟踪值/错误/访问的字段、编排验证和处理提交——所以您不必这样做。而简化字段校验的话我们可以使用yup工具来实现。 首先安装Formik 和 Yup npm i formik npm i yupFormik 与 R…...
GCC编译选项详解与工程实践指南
GCC编译选项深度解析与工程实践指南1. 编译选项基础概念1.1 编译过程与选项作用GCC编译过程分为预处理、编译、汇编和链接四个阶段。编译选项通过控制这些阶段的行为,实现不同的编译目标:# 完整编译流程示例 gcc -E main.c -o main.i # 预处理 gcc -S…...
别再被ToggleGroup坑了!手把手教你写一个不自动选首项的CustomToggleGroup组件(附完整代码)
深度定制Unity ToggleGroup:打造无默认选中行为的智能组件 引言 在Unity UI开发中,ToggleGroup组件是构建选项卡式界面的常见选择,但许多开发者都遇到过这样的困扰:当ToggleGroup激活时,系统总会自动选中第一个Toggle项…...
5分钟搞定:用OpenAI Function Calling自动生成Python函数(附Gmail API实战代码)
5分钟实战:用OpenAI Function Calling生成Gmail自动化脚本 每次对接Gmail API都要翻文档写重复代码?试试这个方案——用自然语言描述需求,让AI直接生成可运行的生产级代码。下面这段完整代码就是AI生成的成果,包含错误处理、类型…...
PlayCover如何重塑Mac游戏体验?社交与云服务革新玩法深度解析
PlayCover如何重塑Mac游戏体验?社交与云服务革新玩法深度解析 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover PlayCover作为一款开源的Mac iOS模拟器,通过深度整合Discord社交功…...
语义通信:从理论到6G落地的关键技术演进与挑战
1. 语义通信的理论基石 语义通信(Semantic Communication, SemCom)的核心思想与传统通信有着本质区别。传统通信追求的是"准确传输比特流",而语义通信关注的是"有效传递信息的意义"。这就像两个人对话:传统通…...
开发提效新组合:用Cursor生成代码片段,在快马一键集成与部署
最近在做一个数据整理的小工具时,发现了一个特别高效的工作流组合:先用Cursor快速生成核心代码片段,再用InsCode(快马)平台一键整合部署。整个过程就像搭积木一样顺畅,特别适合需要快速实现功能模块的场景。 需求分析 我们经常要处…...
python基于微信小程序的直播带货商品数据分析系统的爬虫可视化
目录需求分析与系统架构设计微信小程序数据爬取方案数据存储与清洗数据分析与可视化系统集成与部署注意事项项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与系统架构设计 明确系统目标为爬取微信小程序直播带货商品数…...
LTI系统设计避坑指南:因果性与稳定性在实际工程中的5个关键检查点
LTI系统设计避坑指南:因果性与稳定性在实际工程中的5个关键检查点 在数字信号处理领域,线性时不变(LTI)系统的设计是工程师日常工作的核心。然而,理论推导与工程实践之间往往存在一道鸿沟——许多在数学上完美的系统模…...
2026 年直播电商如何进化?内容创作与管理的新模式是什么?
核心要点 问题: 为什么很多直播电商团队在 2025 年后明显感到"内容越来越多,但效果越来越不稳定"? 答案: 进入 2026 年,直播电商从"单场爆发"转向"内容体系竞争"。真正拉开差距的&#…...
企业级流程建模前端架构:基于Vite+Vue3的低代码解决方案
企业级流程建模前端架构:基于ViteVue3的低代码解决方案 【免费下载链接】vite-vue-bpmn-process 基于 Vite TypeScript Vue3 NaiveUI Bpmn.js 的流程编辑器(前端部分)。支持高度自定义🚀🚀🚀。Vue 2 版本…...
