SpringBoot實(shí)現(xiàn)熱部署兩種方式饭望!

image

前言

??小宅作為一個Java程序員,在日常的工作中形庭,經(jīng)常需要修改代碼铅辞,然后重啟服務(wù),在驗(yàn)證代碼是否生效萨醒。如果是小項(xiàng)目還好斟珊,重啟速度比較快,等待時間比較短富纸。但是隨著項(xiàng)目逐漸變大囤踩,并且被拆分成多個服務(wù)時,改動一些代碼晓褪,可能需要重啟多個服務(wù)才能生效高职。這樣下來就耗費(fèi)了大量的時間在等待服務(wù)重啟。

??這樣肯定是不行的辞州,極大的影響了我的開發(fā)效率,那么是否有方式能夠?qū)崿F(xiàn)寥粹,修改完代碼之后变过,能夠不重啟項(xiàng)目呢伏社?

那肯定是有的鸣皂,要不然這篇文章咋來的??。

熱部署(Hot Swap)

??從Java1.4起,JVM引入了HotSwap播急,能夠在Debug的時候更新類的字節(jié)碼。所以使用熱部署杨拐,可以實(shí)現(xiàn)修改代碼后棕所,無須重啟服務(wù)就可以加載修改的代碼,但是它只能用來更新方法體辨宠。作為神器的IDEA自然是支持這一技術(shù)的遗锣。

配置IDEA

??點(diǎn)擊當(dāng)前運(yùn)行的服務(wù),再點(diǎn)擊Edit Configurations嗤形。

image

??點(diǎn)擊要配置的程序精偿,找到 On ‘Update’ actionOn frame deactivation選擇 Update classes and resources。點(diǎn)擊OK就可以實(shí)現(xiàn)熱部署了赋兵。

image

??經(jīng)過以上配置笔咽,在修改代碼以后。只需要點(diǎn)擊小錘子或者使用快捷鍵Command + F9重新編譯一下霹期,就可以讓改動的代碼生效了叶组。并且還會提示有多少個class被重新讀取了。

image
image

?? 雖然到這里已經(jīng)能實(shí)現(xiàn)熱部署的功能了历造。但是Java的虛擬機(jī)只能實(shí)現(xiàn)方法體的修改熱部署甩十,對于整個類的結(jié)構(gòu)修改,仍然需要重啟虛擬機(jī)帕膜,對類重新加載才能完成更新操作枣氧。

測試

初始狀態(tài)
image
方法體修改
image
類結(jié)構(gòu)變更

??由于熱部署只支持修改方法體,所以類結(jié)構(gòu)變更時會報(bào)錯垮刹,并提示是否需要重啟达吞。

image

DevTools

??前面雖然通過配置IDEA實(shí)現(xiàn)了簡單的熱部署,但是有很明顯的缺點(diǎn)荒典,只能實(shí)現(xiàn)方法體的修改熱部署酪劫。很明顯無法滿足日常的需求的,所以這個時候就需要使用DevTools來替代了寺董。

?? DevTools是Spring為開發(fā)者提供了一個名為spring-boot-devtools的模塊覆糟,來使Spring Boot應(yīng)用支持熱部署,提高開發(fā)者的開發(fā)效率遮咖,無需手動重啟Spring Boot應(yīng)用滩字。使用起來非常簡單,只需要將下面的依賴引入項(xiàng)目里面就可以了。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

觸發(fā)重啟

?? DevTools嚴(yán)格意義上其實(shí)不算熱部署麦箍,而是快速重啟漓藕。為什么這樣說呢?DevTools的實(shí)現(xiàn)原理是:使用兩個類加載器挟裂,一個是base classloader來加載不會被更改的類(例如享钞,來自第三方的Jar),還有一個是restart classloader用來加載當(dāng)前正在開發(fā)的類诀蓉。所以當(dāng)應(yīng)用程序重新啟動時栗竖,restart classloader將被丟棄,并創(chuàng)建一個新的類加載器渠啤。也就意味著應(yīng)用程序重新啟動通常比“冷啟動”快得多狐肢,因?yàn)?code>base classloader已經(jīng)填充好了并且是可用的。

??簡而言之就是:通過監(jiān)控類路徑資源埃篓,當(dāng)類路徑上的文件發(fā)生更改時处坪,自動重新啟動應(yīng)用程序,由于只需要重新讀取被修改的類架专,所以要比冷啟動快同窘。

??那么問題來了,該如何更新類路徑來觸發(fā)自動重啟呢部脚?其實(shí)這個取決于你使用的 IDE:

  1. 在 Eclipse中想邦,保存修改后的文件會導(dǎo)致更新類路徑并觸發(fā)重新啟動。
  2. 在 IntelliJ IDEA中委刘,需要點(diǎn)擊Build按鈕Command + F9構(gòu)建項(xiàng)目來實(shí)現(xiàn)丧没。

配置自動重啟

??這時候可能有小伙伴想問了,難道IDEA沒有類似于Eclipse中保存文件自動觸發(fā)重啟的功能嘛锡移。那肯定是有的呕童,只需要進(jìn)行下面兩步的配置就可以實(shí)現(xiàn)了。

注意:需要將前面的設(shè)置淆珊,全部還原夺饲。

??1. 開啟Build project automatically

image

??2. 使用快捷鍵:Ctrl + Alt + Shift + / 調(diào)出 Registry 窗口,勾選 compiler.automake.allow.when.app.running 選項(xiàng)施符。

新版本如下圖所示:

image

總結(jié)

?IDEA只能實(shí)現(xiàn)方法體的修改熱部署往声,無法滿足日常的使用要求,所以更推薦使用DevTools戳吝。但是如果你覺得重新啟動對你來說還不夠快浩销。你可以考慮使用JRebel插件。

結(jié)尾

??如果覺得對你有幫助听哭,可以多多評論慢洋,多多點(diǎn)贊哦塘雳,也可以到我的主頁看看,說不定有你喜歡的文章且警,也可以隨手點(diǎn)個關(guān)注哦粉捻,謝謝。

??我是不一樣的科技宅斑芜,每天進(jìn)步一點(diǎn)點(diǎn),體驗(yàn)不一樣的生活祟霍。我們下期見杏头!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沸呐,隨后出現(xiàn)的幾起案子醇王,更是在濱河造成了極大的恐慌,老刑警劉巖崭添,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寓娩,死亡現(xiàn)場離奇詭異,居然都是意外死亡呼渣,警方通過查閱死者的電腦和手機(jī)棘伴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屁置,“玉大人焊夸,你說我怎么就攤上這事±督牵” “怎么了阱穗?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長使鹅。 經(jīng)常有香客問我揪阶,道長,這世上最難降的妖魔是什么患朱? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任鲁僚,我火速辦了婚禮,結(jié)果婚禮上麦乞,老公的妹妹穿的比我還像新娘蕴茴。我一直安慰自己,他們只是感情好姐直,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布倦淀。 她就那樣靜靜地躺著,像睡著了一般声畏。 火紅的嫁衣襯著肌膚如雪撞叽。 梳的紋絲不亂的頭發(fā)上姻成,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音愿棋,去河邊找鬼科展。 笑死,一個胖子當(dāng)著我的面吹牛糠雨,可吹牛的內(nèi)容都是我干的才睹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼甘邀,長吁一口氣:“原來是場噩夢啊……” “哼琅攘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起松邪,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤坞琴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逗抑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剧辐,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年邮府,在試婚紗的時候發(fā)現(xiàn)自己被綠了荧关。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡挟纱,死狀恐怖羞酗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情紊服,我是刑警寧澤檀轨,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站欺嗤,受9級特大地震影響参萄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜煎饼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一讹挎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吆玖,春花似錦筒溃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翅阵,卻和暖如春歪玲,著一層夾襖步出監(jiān)牢的瞬間迁央,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工滥崩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岖圈,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓钙皮,卻偏偏與公主長得像蜂科,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子短条,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容