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

news2025/1/11 16:57:28

目录

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-python_iloc_loc

使用Python中的iloc和loc方法对数据进行索引 如果你正在使用Python来进行数据处理或者数据分析,那么你肯定会遇到需要对数据进行索引的情况。Python提供了两个非常有用的方法——iloc和loc,对于数据的索引和切片操作非常实用。在本文中,我们…

yolov5-7.0 添加BiFPN

1. BiFPN特征融合 BiFPN是目标检测中神经网络架构设计的选择之一,为了优化目标检测性能而提出。主要用来进行多尺度特征融合,对神经网络性能进行优化。来自EfficientDet: Scalable and Efficient Object Detection这篇论文。 在这篇论文中,作…

算法27:从暴力递归到动态规划(2)

上一题比较简单,下面来一道比较难的题目。 假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2 开始时机器人在其中的M位置上(M 一定是 1~N 中的一个) 如果机器人来到1位置,那么下一步只能往右来到2位置; 如果机…

初级程序员如何快速晋升为技术大牛

[请搜索公众号“云智AI助手”、“云智博瑞”关注我们 │ 谢谢支持 ] Cloud wisdom, AI assistant 作为初级程序员,你是否常常遇到代码优Bug调试的难题?幸运的是,ChatGPT可以助你一臂之力。本文将通过多个实例展示,如何借ChatGPT的…

【微信支付】分享一个失败的项目

这个项目是去年做的,开始客户还在推广,几个月后发现服务器已经关掉了。这是一个发图片猜谜语的应用,用户猜对了分红包,所得奖金可以提现。开发的时候对需求都不太看好,觉得用户粘性太低了。今天就把所有的程序拿了出来…

[抢先看] 全平台数据 (数据库) 管理工具 DataCap 1.10.0

推荐一个基于 SpringBoot 开发的全平台数据 (数据库管理工具) 功能比较完善,建议下载使用: github.com/EdurtIO/datacap 目前已经支持 40 多种数据源。国内首个应用 ChatGPT 到数据管理系统中项目。 在 DataCap v1.10.0 中我们主要核心修改了数据编辑器,…

多线程处理有序集合

文章目录 前言一、多线程处理有序集合?总结 前言 通过多线程,处理数据是一个快速提高处理的手段,那么当用多线程处理的时候,如果遇到有序集合怎么办?例如: 我想爬取一本小说,那么爬取完成后,需要的是 一个有序的章节小说,而非混乱的 章节,如何做呢? 一、多线程处…

.Net8顶级技术:边界检查之IR解析(慎入)

前言 C#这种语言之所以号称安全的,面向对象的语言。这个安全两个字可不是瞎叫的哦。因为JIT会检查任何可能超出分配范围的数值,以便使其保持在安全边界内。这里有两个概念,其一边界检查,其二IR解析。后者的生成是前者的功能的保证…

音视频使用qt测试ffmpeg接口时无法运行

仅仅时把自己过程中遇到的稍微阻塞疑惑问题做出整理,疑惑的是拿到的ffmpeg包中没有dll文件,导致自己研究了一系列。 使用qt加载音视频ffmpeg对应的相关lib库,进行接口,源码的研究。 1:使用源码安装的方式获取相关的动…

【蓝桥杯省赛真题40】Scratch报数游戏 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch报数游戏 一、题目要求 编程实现 二、案例分析 1、角色分析

OKR是什么意思啊

一、OKR是什么意思? OKR是"Objective and Key Results"的缩写,即目标和关键结果。它是一种目标管理框架,旨在帮助组织和团队设定明确的目标,并通过关键结果来衡量和追踪目标的实现情况。 为了让大家快速了解什么是OKR…

基于变长频带选择的JPEG图像可逆数据隐藏-文献学习

论文学习 原文题目: Reversible Data Hiding of JPEG Image Based on Adaptive Frequency Band Length 发表期刊: TCSVT 2023(中科院1区) 作者: Ningxiong Mao, Hongjie He, Fan Chen, Yuan Yuan, Lingfeng Qu 摘要 J…

SolVES模型应用(基于多源环境QGIS\PostgreSQL\ARCGIS\MAXENT\R语言支持下模型应用)

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

又双叒叕入选!腾讯安全NDR连续四年获Gartner认可

近日,全球权威研究机构 Gartner发布了2023年《Emerging Tech: Security — Adoption Growth Insights for Network Detection and Response》(《新兴技术:安全-网络检测与响应的采用增长洞察》),腾讯安全连续四年被列为…

内卷把同事逼成了“扫地僧”,把Git上所有面试题整理成足足24W字测试八股文

互联网大厂更多的是看重学历还是技术? 毫无疑问,是技术,技术水平相近的情况下,肯定学历高/好的会优先一点,这点大家肯定都理解。 说实话,学弟学妹们找工作难,作为面试官招人也难呀&#xff01…

使用laf云开发三分钟上线你自己的Midjourney

文章尾部有demo 江湖惯例:先来一波感谢,感谢laf,让我们可以不使用魔法、免费接入Midjourney,不了解laf的请猛戳 Laf介绍 一、写这篇博客的背景 laf官方最近发布了一个活动,活动链接,新手也可以接入哦&…

云渲染平台为什么越来越多的效果图公司开始使用?

随着3dmax版本的不断更迭,包括常用的V-Ray渲染器和Corona渲染器的不断更新,室内设计行业对于 效果图的渲染要求越来越高。而要求更高的渲染精度和更真实的渲染效果,所需要付出的代价则是不断增长的参数,这会使渲染一张效果图的时间…

chatgpt赋能Python-python_lamba

Python Lambda: 什么是Lambda表达式? Python是一种强大的编程语言,它支持许多编程范式,包括函数式编程。Lambda表达式是函数式编程的一个重要概念。许多人对Lambda表达式感到困惑,认为它们很难理解。本文将介绍Python的Lambda表达…

如何对Windows剪切板里的内容进行取证分析 Windows剪切板取证

前言 无论是在现实中对设备进行取证分析,还是在ctf中做取证类的题目,剪切板里的内容都需要去查看,以免遗漏什么重要信息 剪切板位置 剪切板是计算机操作系统提供的一个临时存储区域,用于在不同应用程序之间复制和粘贴文本、图像…

S72402-NANANA伺服驱动器相当于大脑,执行电机相当于手脚

​ S72402-NANANA伺服驱动器相当于大脑,执行电机相当于手脚 伺服驱动器在控制信号的作用下驱动执行电机,因此驱动器是否能正常工作直接影响设备的整体性能。在伺服控制系统中,伺服驱动器相当于大脑,执行电机相当于手脚。而伺服驱动…