首页 > 其他分享 >SpringBoot实现热部署详解

SpringBoot实现热部署详解

时间:2023-12-26 17:32:37浏览次数:36  
标签:文件 SpringBoot 部署 Spring Boot 应用程序 详解 加载

前言

Spring Boot热部署是一种开发时极为有用的功能,它能够让开发人员在代码修改后无需手动重启应用程序就能立即看到变化的效果。以下是使用Spring Boot热部署的几个主要原因:

1.提高开发效率

热部署使开发人员能够更快地验证和测试他们的代码更改。无需手动重启应用程序,每次修改后只需保存文件即可立即查看结果。这大大缩短了开发和调试周期,提高了开发效率。

2.实时调试

通过热部署,开发人员可以在应用程序运行时动态调试代码。他们可以添加断点,检查变量的值,以及在应用程序运行期间观察代码的行为。这对于快速定位和解决问题非常有帮助。

3.编码体验

使用热部署可以使开发人员保持在一个持续的编码状态,无需中断来手动重启应用程序。他们可以实时查看他们的代码修改的效果,使得编码过程更加流畅和连贯。

4.减少重复操作

热部署避免了频繁的应用程序重启,减少了无意义的等待时间。开发人员只需保存文件,系统就会自动重新加载相关的类和资源,使得每次代码修改都会立即生效。这有助于减少工作流程中重复的操作,提高工作效率。


原理

Spring Boot实现热部署的原理主要是利用了Java虚拟机(JVM)的类加载机制和文件监控机制。下面是热部署的基本原理:

1.类加载机制

Java虚拟机使用类加载器(ClassLoader)来加载和链接类。当应用程序运行时,类加载器会根据需要动态加载类并创建类的对象。Spring Boot利用了Java虚拟机的类加载机制,通过重新加载修改后的类实现热部署。

2.文件监控机制

Spring Boot将应用程序和开发环境中的文件系统进行关联,并监听所关联的文件夹中的文件更改。当检测到文件更改时,Spring Boot会重新加载与更改文件相关的类。


通过以下几种方式实现项目的热部署:


1.spring-boot-devtools

这是SpringBoot提供的热部署工具,添加依赖:

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

实现资源修改后的自动重启等功能。启动应用程序时,DevTools会自动配置热部署,并在保存文件时重新启动应用程序。DevTools还提供了其他功能,如自动重新启动、自动刷新页面等,以提高开发效率。


2.使用Spring Loaded

Spring LoadedSpring的热部署程序,实现修改类后的自动重载。实现原理是使用自定义ClassLoader,可以实现代码热替换。具体实现如下:

2.1 在pom.xml文件中添加Spring Loaded的依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>springloaded</artifactId>
    <version>1.2.8.RELEASE</version>
</dependency>

2.2 在IDE或编译器中配置项目的自动构建功能。确保在保存文件时自动重新构建项目。

2.3 启动应用程序时,添加以下JVM参数:

-javaagent:/path/to/springloaded.jar -noverify

其中/path/to/springloaded.jar是Spring Loaded JAR文件的路径,根据你的实际情况进行相应的修改。

2.4 启动应用程序并进行开发。

每当保存文件时,Spring Loaded会自动检测到更改并重新加载修改后的类,使得你的更改能够立即生效。

需要注意的是,Spring Loaded是一个第三方库,使用它可能会有一些限制和不稳定性。Spring官方已经不再维护Spring Loaded


3.JRebel插件

JRebel收费的热部署软件,需要添加JRebel插件,可以实现代码热部署。效果非常好,但是需要付费使用。


4.Spring Boot Maven插件该插件


可以监控代码变动,自动重启应用。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <fork>true</fork>
    </configuration>
</plugin>


5.在IntelliJ IDEA中设置Spring Boot项目的热部署

5.1 在IntelliJ IDEA中打开你的Spring Boot项目。

5.2 确保已经安装了Spring Boot DevTools插件。可以通过 File -> Settings -> Plugins 进入插件管理页面,搜索并安装Spring Boot DevTools插件。

5.3 在IntelliJ IDEA的顶部菜单栏中,选择 Run -> Edit Configurations

5.4 在弹出的Run/Debug Configurations对话框中,选择左侧的 Spring Boot

5.5 在右侧的 Spring Boot 配置窗口中,将 On-frame deactivation 和 On-update action 选项设置为 Update classes and resources

  • On-frame deactivation:当你切换到其他窗口时,配置的更新策略。
  • On-update action:当检测到文件更改时,配置的更新策略。

这样设置后,当你切换到其他窗口时,应用程序会在后台重新启动,同时当检测到文件更改时,应用程序会更新相关的类和资源。

5.6 点击 Apply 或 OK 按钮保存配置。

5.7 点击IntelliJ IDEA的顶部菜单栏中的 Build -> Build Project 来构建你的项目。

5.8 在构建完成后,点击工具栏上的绿色箭头图标或使用快捷键 Shift + F10 来运行你的Spring Boot应用程序。

现在,当你修改代码并保存文件时,IntelliJ IDEA会自动将更改的类和资源重新加载到运行的应用程序中,实现热部署。

请注意,热部署只适用于开发环境,并且对于某些修改,可能需要重启应用程序才能生效。因此,在生产环境中不建议使用热部署。


标签:文件,SpringBoot,部署,Spring,Boot,应用程序,详解,加载
From: https://blog.51cto.com/u_12266412/8985498

相关文章

  • APP开发详解:数字药店系统源码
    数字药店系统的兴起,不仅为消费者提供了更加便捷的购药体验,也为药店管理和药品销售带来了全新的机遇。一、明确系统的基本功能:1.用户注册与登录2.药品浏览与搜索3.购物车与结算。4.在线支付与订单管理二、开发环境与技术栈选择前端开发环境通常使用React、Vue或Angular等流行的前端......
  • 3、 configure命令详解
    1、configure命令工作检测操作系统内核和已安装的软件相关参数解析中间目录生成生成c源码文件生成Makefile文件2、configure命令参数详解运行./configure--help--helpprintthismessage--prefix=PATHset......
  • springboot自动部署脚本
    #!/bin/sh##javaenvexportJAVA_HOME=/usr/local/jdk/jdk1.8.0_101exportJRE_HOME=$JAVA_HOME/jreAPI_NAME=apiJAR_NAME=$API_NAME\.jar#PID代表是PID文件PID=$API_NAME\.pid#使用说明,用来提示输入参数usage(){echo"Usage:sh执行脚本.sh[start|stop|re......
  • nginx部署vue编译项目刷新页面404
    原因:nginx配置错误。因为vue打包输出的是单页网页应用,只有一个index.html入口,其他路径是由前端路由去跳转的,服务器目录下没有对应物理路径,所以就会报404。这样的nginx配置会出现该问题。location/{alias/home/vue/dist/;indexindex.html;}  解......
  • SpringBoot集成多个RabbitMq(多个MQ链接)
    ##2023年12月16日20:25:36 项目中使用RabbitMQ作为应用间信息互通,本次梳理下关于MQ的使用。1、引入依赖<!--引入依赖,使用v2.5.6版本--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot......
  • Java泛型详解
    Java泛型详解转载自:Java中的泛型(两万字超全详解)一、泛型概述1.什么是泛型?为什么要试用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参列表,普通方法的形参列表中,每个形参的数据类型的确定的,而变量是一个参数。在调用普通方法时需要传入对应形参数据类型的......
  • 基于SpringBoot+Vue的毕业设计系统的开发设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • Centos7使用Docker部署Nextcloud
    基础环境系统centos7.9内存2G以上磁盘30G以上安装部署1、安装基础工具[root@localhost~]#yum-yinstallvimnet-toolsnmaptreelrzszlsof2、添加阿里docker源[root@localhost~]#wget-P/etc/yum.repos.d/https://mirrors.aliyun.com/docker-ce/linux/centos/docker-......
  • 记一下在IIS中部署WebSocket服务的经验
    因业务需求需要使用长连接推送数据,这边选择使用.NET框架原生支持的WebSocket技术。 一、版本要求 对于IIS的版本必须是IIS8.0及以上 .NETFramework版本必须为4.5及以上PS:低于上述版本,需要自己实现协议或寻找第三方实现 二、IIS配置在服务器IIS上安装“WebSoc......
  • Unity3D:打造关卡编辑器详解
    前言Unity是一款非常流行的游戏引擎,它提供了丰富的工具和功能,可以让开发者轻松地创建各种类型的游戏。其中,关卡编辑器是一个非常重要的工具,它可以让开发者快速、方便地创建游戏中的关卡。本文将详细介绍如何使用Unity打造一个关卡编辑器,并提供代码实现。对惹,这里有一个游戏开发......