『IDEA』代码热部署和热加载

前言

在日常开发中,我们需要经常修改 Java 代码,手动重启项目,查看修改后的效果。如果在项目小时,重启速度比较快,等待的时间是较短的。但是随着项目逐渐变大,重启的速度变慢,等待时间 1-2 min 是比较常见的

我们可以使用代码热加载和热部署解决该问题,目前实现方案主要有如下三种

  1. spring-boot-devtools【不推荐】
  2. IDEA 自带 HowSwap 功能【推荐】
  3. JRebel 插件【最推荐】

严格意义上,我们需要区分下热部署和热加载

热部署在服务器运行时重新部署项目,即直接重新加载整个应用,这种方式会释放内存,比热加载更加干净彻底,但同时也更费时间

热加载在在运行时重新加载类,从而升级应用。热加载的实现原理主要依赖 java 的类加载机制,在实现方式可以概括为在容器启动的时候起一条后台线程,定时的检测类文件的时间戳变化,如果类的时间戳变掉了,则将类重新载入。对比反射机制,反射是在运行时获取类信息,通过动态的调用来改变程序行为;热加载则是在运行时通过重新加载改变类信息,直接改变程序行为

spring-boot-devtools

注:本种方式重新加载速度过慢,不推荐

pom.xml 添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional> <!-- 可以防止将devtools依赖传递到其他模块中 -->
    </dependency>
</dependencies>

我们使用 IDEA 可以有两种启动方式

手动重启

无任何配置时,当我们启动应用之后,可以手动触发重启更新(Ctrl+F9),也可以使用 mvn compile 编译触发重启更新

虽然这样可以减少加载时间,但是依旧是需要手动启动的,不太方便,所以可以使用如下自动重启方式

自动重启

首先需要按照如下步骤开启 IDEA 运行时编译

配置如下允许自动构建项目

image.png

然后再配置允许运行时重启

image.png

配置 application.yml

spring:
  devtools:
    restart:
      enabled: true  #设置开启热部署
      additional-paths: src/main/java #重启目录
      exclude: WEB-INF/**
  thymeleaf:
    cache: false #使用Thymeleaf模板引擎,关闭缓存

其实理论上来说,devtool 本身基于重启方式,这种仍然不是真正的热替换方案,所以实际开发中慎用

如果自动重启的开销和手动重启没有什么太大差别,那么还不如手动重启(按需重启)

多数情况下,如果是方法内部的修改或者静态资源的修改,在 IDEA 中是可以通过 Rebuild(Ctrl + Shift + F9)进行热更的

HowSwap

该功能是 IDEA Ultimate 旗舰版的专属功能,不支持 IDEA Community 社区版

设置 Spring Boot 启动类,开启 HotSwap 功能,之后 Debug 运行该启动类,等待项目启动完成。
之后每次修改 Java 代码后,点击左下角的「热加载」按钮,即可实现代码热加载。

image.png

image.png

IDEA 自带 HowSwap 功能,支持比较有限,很多修改都不支持。例如说:

  • 只能增加方法或字段但不可以减少方法或字段
  • 只能增加可见性不能减少
  • 只能维持已有方法的签名而不能修改等等。

简单来说,只支持方法内的代码修改热加载,所以如果想要相对完美的方案,建议使用 JRebel 插件

JRebel

JRebel 安装配置及激活方式有如下两种

方法 1

注:该方法实测失败,请使用方法 2 (但是方法 2 需要参考方法 1)

直接从 IDEA 插件市场安装插件

image.png

image.png

安装 JRebel 插件后,注册地址填写激活网址 + 生成的 GUID,邮箱随便填写,然后直接激活即可

激活网址列表,尽量用排序靠前的

http://jrebel-license.jiweichengzhu.com/{GUID}

https://jrebel.qekang.com/{GUID}

GUID 可以使用如下地址在线生成,然后替换上面的{GUID}就行

GUID 生成在线链接:在线GUID随机生成工具-Bejson.com

邮箱地址可随便输入,选择我同意,最后提交即可

image.png

方法 2

下载链接:JRebel and XRebel - IntelliJ IDEs Plugin | Marketplace (jetbrains.com)

首先手动下载  2022.4.1 版本插件压缩包,然后在 IDEA 中手动从磁盘中安装插件

image.png

安装完成之后重启,之后按照如下步骤进行,之后的激活网址和邮箱参照方法 1 方法填写即可

image.png

image.png

然后点击「Work Offline」按钮,设置 JRebel 为离线,避免因为网络问题导致激活失效

image.png

如何使用

注:使用 JRebel 同样需要进行上面 spring-boot-devtools 中 settings 中的配置。如果前面不配置,首次运行 JRebel 会自动提醒,并且询问是否自动开启,到时候点击"是"即可自动配置

image.png

之后我们每次修改代码后,保存后都会自动热加载,当然如果想要手动更新点击刷新图标按钮即可

参考链接

本文由博客一文多发平台 OpenWrite 发布!

  • 88
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 92
    评论
### 回答1: idea spring热部署是指在使用IntelliJ IDEA集成开发环境(IDE)开发Spring框架的应用程序时,可以在不停止应用程序的情况下,实时更新代码和资源文件。 热部署是一个开发工具,它可以使开发人员更加高效地开发和调试应用程序。在传统的开发过程中,每次修改代码后需要重新编译和部署整个应用程序,这需要花费大量的时间和精力。而通过使用idea spring热部署,开发人员只需要在IDE中保存代码更改,应用程序就会自动重新加载最新的代码,无需手动重启应用程序。 热部署的好处是显而易见的。首先,它提供了即时反馈,减少了开发人员进行调试和测试所需的时间。其次,它可以减少重复的工作量,提高了开发人员的工作效率。此外,由于不需要重启应用程序,所以可以避免不必要的停机时间和用户的不便。 但是,idea spring热部署也有一些限制。例如,某些代码和配置文件的更改可能需要重新启动应用程序才能生效。此外,对于某些复杂的代码更改,可能需要手动重新加载资源和重新初始化应用程序的某些部分。 总的来说,idea spring热部署为开发人员提供了一种快速有效地开发和调试Spring应用程序的方法。它有助于提高开发效率,减少不必要的工作量,并提供了更好的用户体验。 ### 回答2: idea spring热部署指的是在使用IntelliJ IDEA开发Spring框架应用程序时,可以实现无需重启服务器即可应用更改的功能。 传统的部署方式中,当我们在开发过程中对代码进行修改后,需要重新编译、重新部署服务器才能使修改生效。而idea spring热部署技术的出现,解决了这个问题,使开发者可以在不停止服务器的情况下快速应用代码的更改。 idea spring热部署实现的原理是,在项目启动时,IntelliJ IDEA会监听项目的文件变化。当文件发生修改时,IDE会自动重新编译变动的文件,并将编译结果实时反映到运行中的应用程序中,从而使修改生效。 通过使用idea spring热部署,我们可以提高开发效率,节省了每次修改代码后重新启动服务器的时间。此外,热部署还可以帮助我们快速验证代码修改的正确性,减少了由于重启服务器而产生的测试等待时间。 但同时需要注意的是,idea spring热部署对于所有的代码更改并不都适用。例如,对于一些配置文件的修改,IDEA可能无法自动检测到变化,此时仍然需要手动重启服务器才能使修改生效。 总而言之,idea spring热部署是一种方便快捷的开发工具,能够提高开发效率,加快应用程序的部署和调试速度。但在实际使用中,需要注意它的适用范围,并根据具体情况选择是否使用该功能。 ### 回答3: Idea Spring是一个Java开发工具,可以实现热部署功能。热部署是指在不停止应用程序的情况下,对应用程序的代码进行修改并立即生效。 Idea Spring通过在开发过程中自动监测应用程序的代码变化,并在代码发生改变时自动重新部署应用程序,从而实现热部署。这使得开发人员可以实时查看对代码的修改效果,提高了开发效率。 使用Idea Spring进行热部署非常简单。开发人员只需在代码发生改变时保存文件,Idea Spring会自动检测到文件的变化,并重新编译和部署应用程序。这样,开发人员无需手动停止和启动应用程序,就可以立即看到最新的代码修改结果。 热部署对于调试和测试非常有用。开发人员可以在代码运行过程中修改和调试应用程序,而无需重新启动。这使得开发人员可以快速地修复bug和验证修改的效果,提高了调试和测试的效率。 此外,Idea Spring还提供了一些其他的功能,如自动重启和自动加载。自动重启可以在应用程序崩溃或发生错误时自动重新启动应用程序。自动加载可以在应用程序中引入新的类和资源时,自动加载并应用这些变化。 总之,Idea Spring热部署功能可以帮助开发人员在应用程序开发过程中快速地查看和验证代码修改的效果,提高了开发效率和调试测试的便利性。
评论 92
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白木Channel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值