目錄
目錄
1.什么是熱部署
1.1.熱啟動(dòng)與熱部署的區(qū)別
2.為什么需要熱部署
3.熱部署產(chǎn)品
3.1.JRebel
3.2.IDEA HotSwap
3.3.HotSwapAgent
3.4.Spring Boot DevTools
3.5.FastHotSwapper
4.FastHotSwapper安裝使用
1.什么是熱部署
熱部署(Hot Deployment)是指在應(yīng)用程序運(yùn)行過程中,對(duì)部分代碼或資源進(jìn)行修改后,無需停止整個(gè)應(yīng)用程序就可以立即生效的一種技術(shù)。熱部署通常用于開發(fā)和測(cè)試環(huán)境,可以節(jié)省時(shí)間和提高效率,讓開發(fā)人員可以更快地驗(yàn)證代碼修改的效果。在生產(chǎn)環(huán)境中,熱部署也可以用于修復(fù)一些輕微的問題或更新應(yīng)用程序的部分功能,避免整個(gè)應(yīng)用程序停機(jī)時(shí)間過長(zhǎng)導(dǎo)致的影響。
1.1.熱啟動(dòng)與熱部署的區(qū)別
熱啟動(dòng)是指在已經(jīng)運(yùn)行的項(xiàng)目上,再次啟動(dòng)(比如說,做了修改代碼),少加載了一些東西,從而啟動(dòng)的比快,節(jié)省開發(fā)時(shí)間。
熱部署會(huì)啟動(dòng)自動(dòng)加載修改代碼的部分。
而idea 本身不支持熱部署,需要在idea中安裝插件
2.為什么需要熱部署
我們研發(fā)同學(xué)在日常開發(fā)調(diào)試階段經(jīng)常會(huì)遇到下面一些情況:
- spring bean中的屬性遺漏@Resource或者@Autowired注解
- mybatis sql配置文件中的sql編寫錯(cuò)誤
- 實(shí)體類中增加(修改或者刪除)屬性導(dǎo)致Fastjson、Jackson無法正常序列化和反序列化
- 方法簽名需要增加一個(gè)參數(shù)或者需要增加一個(gè)CheckedException的申明
- 類中增加靜態(tài)Logger屬性以增加日志輸出
上面所列舉的一些場(chǎng)景,我們研發(fā)同學(xué)必須通過重啟服務(wù)(如tomcat)才能夠使修改的代碼生效。對(duì)于一些小型的系統(tǒng)重啟一次可能只需要花費(fèi)1分鐘左右的時(shí)間,而對(duì)于大型系統(tǒng)重啟一次往往需要5分鐘左右。如果系統(tǒng)中大量使用到了dubbo、mq等技術(shù),由于啟動(dòng)過程中需要建立大量的連接,重啟所花費(fèi)的時(shí)間可能會(huì)更長(zhǎng)。據(jù)統(tǒng)計(jì),研發(fā)同學(xué)每天大概需要重啟服務(wù)10-20次。頻繁的重啟服務(wù),嚴(yán)重影響了研發(fā)同學(xué)開發(fā)、調(diào)試的節(jié)奏,影響整體的工作效率。
熱部署技術(shù)正是為了解決這一問題,熱部署能夠使研發(fā)人員對(duì)代碼的絕大部分修改都能夠立即生效。在不重啟應(yīng)用程序的情況下快速測(cè)試和調(diào)試代碼,幫助研發(fā)減少頻繁的重啟服務(wù)次數(shù),節(jié)省碎片化的時(shí)間。
避免應(yīng)用程序因?yàn)楦露枰C(jī)維護(hù),從而提高了應(yīng)用程序的可用性和穩(wěn)定性。
3.熱部署產(chǎn)品
目前市面上成熟的熱部署產(chǎn)品不是特別多,主要有JRebel、IDEA HotSwap、HotSwapAgent、Spring Boot DevTools,都可以實(shí)現(xiàn)代碼的熱部署。
3.1.JRebel
一款功能強(qiáng)大的熱部署收費(fèi)產(chǎn)品,以IDEA作為用戶操作入口,生態(tài)較為龐大,基本上覆蓋了Java生態(tài)下主流技術(shù)框架的熱部署。其主要的缺點(diǎn)就是國產(chǎn)框架(fastjson、mybatis-plus等)基本上都不支持,并且是一款收費(fèi)產(chǎn)品,需要破解。
3.2.IDEA HotSwap
IDEA自帶的熱部署,能力相對(duì)較弱,僅支持方法體的變更。諸如增加屬性、增加方法、修改類的繼承關(guān)系等變更類結(jié)構(gòu)的操作都是被禁止的,并且spring、mybatis等Java主流框架均不支持。支持的場(chǎng)景非常有限,功能較為單一,難以滿足研發(fā)同學(xué)的日常開發(fā)。
3.3.HotSwapAgent
一款免費(fèi)開源的熱部署Agent(github.com/HotswapProj… 國外團(tuán)隊(duì)開發(fā)的,同樣也是不支持國產(chǎn)框架,但是由于其是完全免費(fèi)開源的,我們可以基于它進(jìn)行二次開發(fā)來支持國產(chǎn)框架的熱部署。也正是因?yàn)槭敲赓M(fèi)開源的,通過深入研究其源代碼,發(fā)現(xiàn)其很多熱部署場(chǎng)景支持的都存在一些問題,包括mybatis代理接口,spring框架整體支持上都存在一些問題。
標(biāo)準(zhǔn)的JVM在運(yùn)行時(shí)只允許修改類的方法體,不允許修改類結(jié)構(gòu)。HotSwapAgent團(tuán)隊(duì)為了解決這一來自JVM的限制研發(fā)了DCEVM補(bǔ)丁(github.com/dcevm/dcevm… 該補(bǔ)丁允許研發(fā)同學(xué)在運(yùn)行期對(duì)類進(jìn)行任何修改。也正是由于這一補(bǔ)丁的出現(xiàn),使得真正意義上的熱部署得以被實(shí)現(xiàn)(JRebel本質(zhì)上也是使用類似的技術(shù)手段)。
3.4.Spring Boot DevTools
Spring Boot DevTools只能應(yīng)用在Spring Boot項(xiàng)目中,并且它不是增量熱部署,而是通過Classloader迭代的方式重啟項(xiàng)目,對(duì)大項(xiàng)目而言,性能上是無法接受的。準(zhǔn)確來說Spring Boot DevTools并非一個(gè)嚴(yán)格意義上的熱部署產(chǎn)品。
3.5.FastHotSwapper
目前市面上的熱部署產(chǎn)品大部分都是國外團(tuán)隊(duì)研發(fā)的,缺少對(duì)國產(chǎn)技術(shù)框架的支持。FastHotSwapper正是為了彌補(bǔ)這一空缺,為廣大研發(fā)同學(xué)提供一款功能強(qiáng)大、簡(jiǎn)單易用、支持國產(chǎn)框架、免費(fèi)的熱部署產(chǎn)品。
FastHotSwapper旨在提高開發(fā)效率。簡(jiǎn)而言之:修改可以立即生效,而無需在整個(gè)編碼過程中重新啟動(dòng)應(yīng)用程序。 具體來說,可以在應(yīng)用程序運(yùn)行時(shí)升級(jí)軟件,而無需重新啟動(dòng)
FastHotSwapper是一款IDEA熱部署插件。其核心(Agent部分)是基于HotSwapAgent做了二次開發(fā),對(duì)spring、mybatis、tomcat、cglib等主流技術(shù)框架進(jìn)行了深度的優(yōu)化,同時(shí)對(duì)一些主流的國產(chǎn)框架進(jìn)行了熱部署支持,例如apollo、mybatis-plus、tk-mybatis、Fastjson等。并以IDEA作為用戶的操作入口,提升熱部署整體的易用性。
4.FastHotSwapper安裝使用
詳情可以參考: plugins.jetbrains.com/plugin/2064…
1)熱部署插件安裝
2)安裝dcevm
1、從下面列表下載jdk8對(duì)應(yīng)版本的DCEVM補(bǔ)丁。補(bǔ)丁要jdk的版本要一一對(duì)應(yīng),否則會(huì)導(dǎo)致jdk崩潰。
FastHotSwapper - IntelliJ IDEs Plugin | Marketplace
2、執(zhí)行安裝命令 mac操作系統(tǒng)或者linux操作系統(tǒng)直接打開terminal運(yùn)行下面命令
cd dcevm 所在目錄
sudo java -jar dcevm-light-java8u192.jar
windows操作系統(tǒng),首先以管理員身份打開cmd,然后執(zhí)行下面命令,盡可能不在C盤執(zhí)行命令
cd dcevm所在目錄
java -jar dcevm-light-java8u192.jar
命令執(zhí)行完成之后便可以彈出下圖所示的可視化操作界面。
需要在jdk和jre上同時(shí)安裝補(bǔ)丁,點(diǎn)擊右下角按鈕:Install DCEVM as altjvm,然后關(guān)閉界面即可。
3)驗(yàn)證
運(yùn)行命令
java -XXaltjvm=dcevm -version
出現(xiàn) "Dynamic Code Evolution"字符串則表示安裝成功
DCEVM要求應(yīng)用的垃圾收集器必須為SerialGC(java8默認(rèn)收集器),安裝該補(bǔ)丁后會(huì)導(dǎo)致非SerialGC的應(yīng)用無法啟動(dòng)
4)關(guān)閉IDEA的熱部署能力
Build,Execution,Deployment > Debug > HotSwap Reload classes after compilation選擇Never。
IDEA自帶的熱部署只能夠支持方法體的變更,無法做到spring、mybatis等框架的動(dòng)態(tài)重載,所以這里禁用IDEA自帶的熱部署功能。
5)熱部署啟動(dòng)
debug啟動(dòng)目標(biāo)應(yīng)用程序,目前只支持以debug啟動(dòng)的應(yīng)用程序。
web容器目前只支持tomcat和jetty,以其他容器部署的應(yīng)用則不支持熱部署。
如出現(xiàn)以下關(guān)鍵信息,代表agent已生效,服務(wù)啟動(dòng)成功后,即可體驗(yàn)熱部署了
6)熱部署操作
當(dāng)完成編碼之后,可以在運(yùn)行中選項(xiàng)卡中打開熱部署面板,校驗(yàn)變更文件列表(如果缺少文件,可以打開該文件使用"ctrl+s"保存一下),然后點(diǎn)擊OK按鈕便可開始熱部署。
同樣可以使用默認(rèn)的快捷鍵(ctrl+alt+9)來一鍵開始熱部署
7)熱部署完成
小結(jié):總的來說非常好用,支持XML文件中的sql熱部署,但是目前發(fā)現(xiàn)不支持2023.3的idea 中的新版ui,如果不使用新版UI應(yīng)沒有問題文章來源:http://www.zghlxwxcb.cn/news/detail-459417.html
參考:
https://juejin.cn/post/7178798474702356540文章來源地址http://www.zghlxwxcb.cn/news/detail-459417.html
到了這里,關(guān)于推薦一款好用的Idea熱部署插件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!