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

这篇具有很好参考价值的文章主要介绍了『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 运行时编译

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

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

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

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

配置 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 代码后,点击左下角的「热加载」按钮,即可实现代码热加载。

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

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

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

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

JRebel

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

方法 1

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

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

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

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

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

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

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

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

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

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

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

方法 2

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

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

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

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

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

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

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

如何使用

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

『IDEA』代码热部署和热加载,框架工具,IDEA,Java,Spring,SpringBoot,热部署,热加载

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

参考链接

  • SpringBoot入门 - 配置热部署devtools工具 Java 全栈知识体系 (pdai.tech)
  • IDEA 热加载 Hot Swap
  • 代码热加载 ruoyi-vue-pro 开发指南 (iocoder.cn)

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-752758.html

到了这里,关于『IDEA』代码热部署和热加载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java开发工具 IDEA(社区免费版)安装部署教程

    国内高速下载: 链接: https://pan.baidu.com/s/1Ioq_BLdyBxSuv4HtUURAQw?pwd=e1vc 提取码: e1vc 复制这段内容后打开百度网盘手机App,操作更方便哦  --来自百度网盘超级会员v1的分享 IDEA官网地址:https://www.jetbrains.com/idea/download/#section=windows 下载社区版后,点击安装,就进行傻瓜式的安装了。

    2024年04月12日
    浏览(84)
  • 在idea工具下,使用protobuf自动生成java代码,超详细教程

    新项目需要使用 google protobuf 生成java代码 开始第一步,网上很多教程都说下载 protobuf support插件,但是我下载了很多idea版本,就是找不到这个 protobuf support 插件 在idea 中选择file -settings -plugin , 搜索protobuf,一般都是有以下几个选项: 这里,我选择下载 protobuf  generate 、-----

    2024年02月16日
    浏览(49)
  • Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架

    在数字化采购领域,企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术,我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力,通过待办消息、招标公告、中标公告和信息发布等功能模块,实现了对供应商的集中管理

    2024年02月03日
    浏览(61)
  • 【框架源码】Spring源码解析之BeanDefinition加载流程解析

    观看本文之前,我们先思考一个问题,Spring是如何描述Bean对象的? Spring是根据BeanDefinition来创建Bean对象,BeanDefinition就是Spring中表示Bean定义。BeanDefinition用来存储Bean的相关信息,主要包括:Bean的属性、是否单例、延迟加载、Bean的名称、构造方法等。 简言之就是Spring通过解

    2024年02月09日
    浏览(44)
  • IDEA加载阿里Java规范插件

    IDEA 加载阿里巴巴 Java 开发手册插件,在写代码的时候会自动扫描代码规范。 1 、打开 Settings 2、打开Plugins 3、搜索 Alibaba Java Code Guidelines ( XenoAmess TPM )插件,点击 Install 进行安装,然后重启 IDE 生效 。 4、鼠标右键点击需要扫描文档,然后点击编码规范扫描。 一系列不符合

    2024年02月05日
    浏览(37)
  • SpringSecurity源码分析(一) SpringBoot集成SpringSecurity即Spring安全框架的加载过程

          Spring Security是一个强大的并且高度可定制化的访问控制框架。 它基于spring应用。 Spring Security是聚焦于为java应用提供授权和验证的框架。像所有的spring项目一样,Spring Security真正的强大在于可以非常简单的拓展功能来实现自定义的需求。       在分析SpringBoot集成的Sp

    2024年02月03日
    浏览(46)
  • 每天使用Spring 框架,那你知道 lazy-init 懒加载原理吗?

    懒加载是Spring框架中的一个重要特性,它允许我们将bean的实例化推迟到第一次使用时。懒加载的主要用途是提高应用程序的启动性能,减少不必要的资源消耗。 在大型的应用程序中,有些bean可能只在特定的条件下才会被使用到。如果在应用程序启动时就实例化所有的bean,会

    2024年02月05日
    浏览(48)
  • IDEA项目实践——Spring框架简介,以及IOC注解

    IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 文章目录 第1章 Spring 概述

    2024年02月14日
    浏览(48)
  • IDEA创建spring boot项目无法加载出maven里的pom.xml,而是settings.gradle

    在创建的maven项目里找不到pom.xml文件而是settings.gradle,如下图所示: 原因和解决方法: 是因为在创建Springboot项目的时候type里选的是Gradle,gradle和maven又不一样,换成maven就行了,具体操作如下图所示: 在用idea创建maven项目时,在Project Metadata界面Type选项下唯有Maven和Maven PO

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包