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

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);}}
http://www.lryc.cn/news/137104.html

相关文章:

  • 我是如何使用Spring Retry减少1000 行代码
  • ARM开发(stm32 cortex-A7核IIC实验)
  • 「Java」《Java集合框架详解:掌握常用集合类,提升开发效率》
  • 游戏出海需知:Admob游戏广告变现策略
  • 【linux】NFS调试总结
  • wireshark进行网络监听
  • 时间复杂度
  • Unity实现广告滚动播放、循环播放、鼠标切换的效果
  • LangChain + Streamlit + Llama:将对话式AI引入本地机器
  • Python 读写 Excel 文件库推荐和使用教程
  • “深入解析JVM:理解Java虚拟机的工作原理和优化技巧“
  • 解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题
  • Oracle-day1:scott用户、查询、取整、截取、模糊查询、别名——23/8/23
  • stm32之3.key开关
  • GPT带我学-设计模式-代理模式
  • VMware Workstation Pro 无法使用开机状态下拍的快照来克隆虚拟机,怎么解决?
  • 【JAVA】XML及其解析技术、XML检索技术、设计模式
  • Ansible 自动化安装软件
  • 简单介绍 React Native 整合 Formik 实现表单校验
  • 蓝帽杯半决赛2022
  • 电路学习+硬件每日学习十个知识点(40)23.8.20 (希腊字母读音,阶跃信号和冲激信号的关系式,信号的波形变换,信号的基本运算,卷积积分,卷积和)
  • Python——列表(list)推导式
  • 代码随想录算法训练营day43 | LeetCode 1049. 最后一块石头的重量 II 494. 目标和 474. 一和零
  • Linux安装jdk、mysql、并部署Springboot项目
  • tomcat更改端口号和隐藏端口号
  • 生信分析Python实战练习 2 | 视频19
  • wps设置其中几页为横版
  • 如何在Ubuntu 22.04上安装PHP 8.1并设置本地开发环境
  • wazuh安装与使用
  • Vue 3 常见面试题汇总