推荐一款好用的Idea热部署插件

2023-10-30

目录

目录

1.什么是热部署

1.1.热启动与热部署的区别

2.为什么需要热部署

3.热部署产品

3.1.JRebel

3.2.IDEA HotSwap

3.3.HotSwapAgent

3.4.Spring Boot DevTools

3.5.FastHotSwapper

4.FastHotSwapper安装使用



1.什么是热部署

热部署(Hot Deployment)是指在应用程序运行过程中,对部分代码或资源进行修改后,无需停止整个应用程序就可以立即生效的一种技术。热部署通常用于开发和测试环境,可以节省时间和提高效率,让开发人员可以更快地验证代码修改的效果。在生产环境中,热部署也可以用于修复一些轻微的问题或更新应用程序的部分功能,避免整个应用程序停机时间过长导致的影响。

1.1.热启动与热部署的区别

热启动是指在已经运行的项目上,再次启动(比如说,做了修改代码),少加载了一些东西,从而启动的比快,节省开发时间。
热部署会启动自动加载修改代码的部分。
而idea 本身不支持热部署,需要在idea中安装插件

2.为什么需要热部署

我们研发同学在日常开发调试阶段经常会遇到下面一些情况:

  1. spring bean中的属性遗漏@Resource或者@Autowired注解
  2. mybatis sql配置文件中的sql编写错误
  3. 实体类中增加(修改或者删除)属性导致Fastjson、Jackson无法正常序列化和反序列化
  4. 方法签名需要增加一个参数或者需要增加一个CheckedException的申明
  5. 类中增加静态Logger属性以增加日志输出

上面所列举的一些场景,我们研发同学必须通过重启服务(如tomcat)才能够使修改的代码生效。对于一些小型的系统重启一次可能只需要花费1分钟左右的时间,而对于大型系统重启一次往往需要5分钟左右。如果系统中大量使用到了dubbo、mq等技术,由于启动过程中需要建立大量的连接,重启所花费的时间可能会更长。据统计,研发同学每天大概需要重启服务10-20次。频繁的重启服务,严重影响了研发同学开发、调试的节奏,影响整体的工作效率。

热部署技术正是为了解决这一问题,热部署能够使研发人员对代码的绝大部分修改都能够立即生效在不重启应用程序的情况下快速测试和调试代码,帮助研发减少频繁的重启服务次数,节省碎片化的时间。

避免应用程序因为更新而需要停机维护,从而提高了应用程序的可用性和稳定性。

3.热部署产品

目前市面上成熟的热部署产品不是特别多,主要有JRebel、IDEA HotSwap、HotSwapAgent、Spring Boot DevTools,都可以实现代码的热部署。

3.1.JRebel

一款功能强大的热部署收费产品,以IDEA作为用户操作入口,生态较为庞大,基本上覆盖了Java生态下主流技术框架的热部署。其主要的缺点就是国产框架(fastjson、mybatis-plus等)基本上都不支持,并且是一款收费产品,需要破解。

3.2.IDEA HotSwap

IDEA自带的热部署,能力相对较弱,仅支持方法体的变更。诸如增加属性、增加方法、修改类的继承关系等变更类结构的操作都是被禁止的,并且spring、mybatis等Java主流框架均不支持。支持的场景非常有限,功能较为单一,难以满足研发同学的日常开发。

3.3.HotSwapAgent

一款免费开源的热部署Agent(github.com/HotswapProj… 国外团队开发的,同样也是不支持国产框架,但是由于其是完全免费开源的,我们可以基于它进行二次开发来支持国产框架的热部署。也正是因为是免费开源的,通过深入研究其源代码,发现其很多热部署场景支持的都存在一些问题,包括mybatis代理接口,spring框架整体支持上都存在一些问题。

标准的JVM在运行时只允许修改类的方法体,不允许修改类结构。HotSwapAgent团队为了解决这一来自JVM的限制研发了DCEVM补丁(github.com/dcevm/dcevm… 该补丁允许研发同学在运行期对类进行任何修改。也正是由于这一补丁的出现,使得真正意义上的热部署得以被实现(JRebel本质上也是使用类似的技术手段)。

3.4.Spring Boot DevTools

Spring Boot DevTools只能应用在Spring Boot项目中,并且它不是增量热部署,而是通过Classloader迭代的方式重启项目,对大项目而言,性能上是无法接受的。准确来说Spring Boot DevTools并非一个严格意义上的热部署产品。

3.5.FastHotSwapper

目前市面上的热部署产品大部分都是国外团队研发的,缺少对国产技术框架的支持。FastHotSwapper正是为了弥补这一空缺,为广大研发同学提供一款功能强大、简单易用、支持国产框架、免费的热部署产品。

FastHotSwapper旨在提高开发效率。简而言之:修改可以立即生效,而无需在整个编码过程中重新启动应用程序。 具体来说,可以在应用程序运行时升级软件,而无需重新启动

FastHotSwapper是一款IDEA热部署插件。其核心(Agent部分)是基于HotSwapAgent做了二次开发,对spring、mybatis、tomcat、cglib等主流技术框架进行了深度的优化,同时对一些主流的国产框架进行了热部署支持,例如apollo、mybatis-plus、tk-mybatis、Fastjson等。并以IDEA作为用户的操作入口,提升热部署整体的易用性。

4.FastHotSwapper安装使用

详情可以参考: plugins.jetbrains.com/plugin/2064…

1)热部署插件安装

2)安装dcevm

1、从下面列表下载jdk8对应版本的DCEVM补丁。补丁要jdk的版本要一一对应,否则会导致jdk崩溃。

FastHotSwapper - IntelliJ IDEs Plugin | Marketplace

2、执行安装命令 mac操作系统或者linux操作系统直接打开terminal运行下面命令

cd dcevm 所在目录
sudo java -jar dcevm-light-java8u192.jar

windows操作系统,首先以管理员身份打开cmd,然后执行下面命令,尽可能不在C盘执行命令

cd dcevm所在目录

java -jar dcevm-light-java8u192.jar

命令执行完成之后便可以弹出下图所示的可视化操作界面。

需要在jdk和jre上同时安装补丁,点击右下角按钮:Install DCEVM as altjvm,然后关闭界面即可。

3)验证

运行命令

 java -XXaltjvm=dcevm -version 

出现 "Dynamic Code Evolution"字符串则表示安装成功

DCEVM要求应用的垃圾收集器必须为SerialGC(java8默认收集器),安装该补丁后会导致非SerialGC的应用无法启动

4)关闭IDEA的热部署能力

Build,Execution,Deployment > Debug > HotSwap Reload classes after compilation选择Never。

IDEA自带的热部署只能够支持方法体的变更,无法做到spring、mybatis等框架的动态重载,所以这里禁用IDEA自带的热部署功能。

5)热部署启动

debug启动目标应用程序,目前只支持以debug启动的应用程序。

web容器目前只支持tomcat和jetty,以其他容器部署的应用则不支持热部署。

如出现以下关键信息,代表agent已生效,服务启动成功后,即可体验热部署了

6)热部署操作

当完成编码之后,可以在运行中选项卡中打开热部署面板,校验变更文件列表(如果缺少文件,可以打开该文件使用"ctrl+s"保存一下),然后点击OK按钮便可开始热部署。

同样可以使用默认的快捷键(ctrl+alt+9)来一键开始热部署

7)热部署完成

小结:总的来说非常好用,支持XML文件中的sql热部署,但是目前发现不支持2023.3的idea 中的新版ui,如果不使用新版UI应没有问题

参考:

https://juejin.cn/post/7178798474702356540

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

推荐一款好用的Idea热部署插件 的相关文章

随机推荐

  • 数据和C学习

    第三章 数据和C 3 1 示例程序 include
  • Linux:冯诺伊曼体系结构

    文章目录 冯诺依曼 主板 显卡 外设 数据流的流向 操作系统OS 系统调用接口和库函数 参考 全文约 1600 字 阅读时长预计 5分钟 冯诺依曼 我们所认识的计算机 都是有一个个的硬件组件组成 冯 诺依曼结构的核心思想 一 确定了 计算机
  • Nginx教程(小白必看,看了必会,不看血亏),

    Notice 测试请打开浏览器禁止缓存 Notice 再使用前 请打开浏览器 F12 然后网络 然后点禁用缓存 避免nginx配置后磁盘缓存的情况 而且 请确认host没问题 备注 你本地设置的host对服务器反向代理后的就没用了 一 介绍
  • 还没毕业,我就进了HR的黑名单!

    今天小红书上的一则热搜 原文求助如下 马赛克的地方是之前的实习单位 这封邮件是发到我的工作邮箱 工作邮箱写在了简历里 因为最近一直在投简历 所以给我发邮箱的人应该是hr 不是什么恶作剧 现在正在疯狂找工作 所以看到这个邮件太害怕了 实在是不
  • idea无法创建servlet

    问题引入 new里面没有servlet项目 自己创建后也无法继承HttpServlet类 整篇代码爆红参考如下博客 IntelliJ IDEA关于 cannot resolve symbol servlet 的解决 进阶中的非主流坛子的博客
  • 2020美赛C题翻译

    翻译 问题C 数据的财富 在其创建的在线市场中 亚马逊为客户提供了对购买进行评分和评价的机会 个人评级 称为 星级 使购买者可以使用1 低评级 低满意度 到5 高评级 高满意度 的等级来表示他们对产品的满意度 此外 客户可以提交基于文本的消
  • JAVA基础之理解JNI原理及应用

    java 以其跨平台的特性深受人们喜爱 而又正由于它的跨平台的目的 使得它和本地机器的各种内部联系变得很少 约束了它的功能 解决JAVA对本地操作的一种方法就是JNI JAVA通过JNI调用本地方法 而本地方法是以库文件的形式存放的 在WI
  • Java 变量

    局部变量 局部变量声明在方法 构造方法或者语句块中 局部变量在方法 构造方法 或者语句块被执行的时候创建 当它们执行完成后 变量将会被销毁 访问修饰符不能用于局部变量 局部变量只在声明它的方法 构造方法或者语句块中可见 局部变量是在栈上分配
  • uml类图浅录

    uml类图 UML中类图的绘制 单个类图的绘制 类图中的成员访问属性 UML类图中类与类的几种关系 关联 代码示例解释 UML类图表示 多重性说明 依赖 代码示例解释 uml类图表示 继承 示例代码解释 UML类图表示 实现 示例代码解释
  • 加密与解密:一个简单的C语言示例

    写在前面 做大一年级的导生 碰巧一个同学问了一个C语言程序设计的题目 说是怎么都弄不对 我看了看 正好也是三年前我碰到的题目 仿佛还噙着旧日时光的泪痕 特此将题目与我的解法奉上 以祭奠那段逝去的时光 1 问题是什么 1 使用要求的方法加密
  • 苹果系统自带的计算机怎么恢复出厂设置方法,苹果电脑Mac怎么恢复出厂系统?Mac恢复出厂系统操作方法...

    Mac和Windows在恢复出厂设置这方面有着异曲同工的操作 其实mac和macbook 系列重装系统或者叫恢复出厂设置 都是一样的步骤 一样的概念 下面来看下具体重装系统 恢复出厂设置 步骤和注意事项 Mac恢复出厂系统操作方法 一 重启
  • android状态栏透明!6年菜鸟开发面试字节跳动安卓研发岗,年薪50W

    本专栏专注分享大型Bat面试知识 后续会持续更新 喜欢的话麻烦点击一个关注 面试官 组件化如何实现 组件化与插件化的差别在哪里 该怎么选型 心理分析 面试官从架构层次 了解求职者是否用过 模块化 组件化 和插件化 在过去经验有没有运用过这些
  • 参加CUDA线上训练营·(二)cuda的c++编译

    目前c 流行的编译器有cmake clang qmake xmake等 本文主要介绍如何在cmake和xmake中编译cuda xmake 简介 xmake是国人开发的一款编译器 官方链接如下 xmake官网 该编译器安装方便 上手快 支持
  • Since & Due to & Because of & Because 的用法和区别

    Since Due to Because of Because 的用法和区别 其实以上4者都有表示因为的意思 但却有用法上的差别 Because Because 因为 表示直接的原因或理由 着重点在从句 从句是句子的主要部分用于回答why
  • springboot集成ES实现磁盘文件全文检索

    有个朋友咨询如何实现对海量磁盘资料进行目录 文件名及文件正文进行搜索 要求实现简单高效 维护方便 成本低廉 我想了想利用ES来实现文档的索引及搜索是适当的选择 于是就着手写了一些代码来实现 下面就将设计思路及实现方法作以介绍 整体架构 考虑
  • 消融实验(Ablation experiment)是什么?

    最近读论文遇到消融实验 Ablation experiment 这个概念 在论文 Deep Snake for Real Time Instance Segmentatione 中5 2 Ablation studies 消融实验类似于 控
  • 韦东山板子编译内核问题解决

    执行 make 100ask imx6ul qemu defconfig时出现错误 Can t find default configuration arch arm configs 100ask imx6ul qemu 解决方法 先检查环
  • 解决Maven的pom.xml找不到依赖jar包版本的报错(dependencyManagement的作用)

    问题来源 今天直接使用了他人的pom xml文件发现有部分依赖jar包出现找不到的情况 查了很多网上的解决办法都不能解决 pom xml中显示报错的是依赖包的版本找不到 像这样 问题分析 我打开本地库发现其中有相应的依赖包 但是没有需要的版
  • 集合框架知识总汇之(Set集合)

    目录 编辑 1 1特点 1 2遍历方式 3 3关于set集合的去重 3 3 1当我们直接调用contans 没有重写hashcold equals 编辑 3 3 2当我们直接调用contans 重写hashcold equals 3 4关于
  • 推荐一款好用的Idea热部署插件

    目录 目录 1 什么是热部署 1 1 热启动与热部署的区别 2 为什么需要热部署 3 热部署产品 3 1 JRebel 3 2 IDEA HotSwap 3 3 HotSwapAgent 3 4 Spring Boot DevTools 3