亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

必知必會(huì)的SpringBoot實(shí)現(xiàn)熱部署兩種方式

 更新時(shí)間:2023年04月12日 09:19:59   作者:不一樣的科技宅  
這篇文章主要為大家介紹了必知必會(huì)的SpringBoot實(shí)現(xiàn)熱部署兩種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

  小宅作為一個(gè)Java程序員,在日常的工作中,經(jīng)常需要修改代碼,然后重啟服務(wù),在驗(yàn)證代碼是否生效。如果是小項(xiàng)目還好,重啟速度比較快,等待時(shí)間比較短。但是隨著項(xiàng)目逐漸變大,并且被拆分成多個(gè)服務(wù)時(shí),改動(dòng)一些代碼,可能需要重啟多個(gè)服務(wù)才能生效。這樣下來(lái)就耗費(fèi)了大量的時(shí)間在等待服務(wù)重啟。

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

那肯定是有的,要不然這篇文章咋來(lái)的??。

熱部署(Hot Swap)

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

配置IDEA

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

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

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

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

測(cè)試

初始狀態(tài)

方法體修改

類(lèi)結(jié)構(gòu)變更

  由于熱部署只支持修改方法體,所以類(lèi)結(jié)構(gòu)變更時(shí)會(huì)報(bào)錯(cuò),并提示是否需要重啟。

DevTools

  前面雖然通過(guò)配置IDEA實(shí)現(xiàn)了簡(jiǎn)單的熱部署,但是有很明顯的缺點(diǎn),只能實(shí)現(xiàn)方法體的修改熱部署。很明顯無(wú)法滿(mǎn)足日常的需求的,所以這個(gè)時(shí)候就需要使用DevTools來(lái)替代了。

   DevTools是Spring為開(kāi)發(fā)者提供了一個(gè)名為spring-boot-devtools的模塊,來(lái)使Spring Boot應(yīng)用支持熱部署,提高開(kāi)發(fā)者的開(kāi)發(fā)效率,無(wú)需手動(dòng)重啟Spring Boot應(yīng)用。使用起來(lái)非常簡(jiǎn)單,只需要將下面的依賴(lài)引入項(xiàng)目里面就可以了。

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

觸發(fā)重啟

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

  簡(jiǎn)而言之就是:通過(guò)監(jiān)控類(lèi)路徑資源,當(dāng)類(lèi)路徑上的文件發(fā)生更改時(shí),自動(dòng)重新啟動(dòng)應(yīng)用程序,由于只需要重新讀取被修改的類(lèi),所以要比冷啟動(dòng)快。

  那么問(wèn)題來(lái)了,該如何更新類(lèi)路徑來(lái)觸發(fā)自動(dòng)重啟呢?其實(shí)這個(gè)取決于你使用的 IDE:

  • 在 Eclipse中,保存修改后的文件會(huì)導(dǎo)致更新類(lèi)路徑并觸發(fā)重新啟動(dòng)。
  • 在 IntelliJ IDEA中,需要點(diǎn)擊Build按鈕Command + F9構(gòu)建項(xiàng)目來(lái)實(shí)現(xiàn)。

配置自動(dòng)重啟

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

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

  1. 開(kāi)啟Build project automatically 。

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

新版本如下圖所示:

總結(jié)

 IDEA只能實(shí)現(xiàn)方法體的修改熱部署,無(wú)法滿(mǎn)足日常的使用要求,所以更推薦使用DevTools。但是如果你覺(jué)得重新啟動(dòng)對(duì)你來(lái)說(shuō)還不夠快。你可以考慮使用JRebel插件。

以上就是必知必會(huì)的SpringBoot實(shí)現(xiàn)熱部署兩種方式的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot熱部署方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springsecurity中http.permitall與web.ignoring的區(qū)別說(shuō)明

    springsecurity中http.permitall與web.ignoring的區(qū)別說(shuō)明

    這篇文章主要介紹了springsecurity中http.permitall與web.ignoring的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java預(yù)覽PDF時(shí)的文件名稱(chēng)問(wèn)題及解決

    Java預(yù)覽PDF時(shí)的文件名稱(chēng)問(wèn)題及解決

    這篇文章主要介紹了Java預(yù)覽PDF時(shí)的文件名稱(chēng)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中遍歷Map的六種方法實(shí)現(xiàn)

    Java中遍歷Map的六種方法實(shí)現(xiàn)

    這篇文章主要介紹了Java中遍歷Map的六種方法,Map是常用的數(shù)據(jù)結(jié)構(gòu)之一,它提供了鍵值對(duì)的存儲(chǔ)方式,可以方便地進(jìn)行數(shù)據(jù)查找和操作,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • SpringBoot利用自定義注解實(shí)現(xiàn)隱私數(shù)據(jù)脫敏(加密顯示)的解決方案

    SpringBoot利用自定義注解實(shí)現(xiàn)隱私數(shù)據(jù)脫敏(加密顯示)的解決方案

    這兩天在整改等保測(cè)出的問(wèn)題,里面有一個(gè)“用戶(hù)信息泄露”的風(fēng)險(xiǎn)項(xiàng)(就是后臺(tái)系統(tǒng)里用戶(hù)的一些隱私數(shù)據(jù)直接明文顯示了),其實(shí)指的就是要做數(shù)據(jù)脫敏,本文給大家介紹了SpringBoot利用自定義注解實(shí)現(xiàn)隱私數(shù)據(jù)脫敏(加密顯示)的解決方案,需要的朋友可以參考下
    2023-11-11
  • java OOM內(nèi)存泄漏原因及解決方法

    java OOM內(nèi)存泄漏原因及解決方法

    這篇文章主要介紹了java OOM內(nèi)存泄漏原因及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java輸入年份和月份判斷多少天實(shí)例代碼

    Java輸入年份和月份判斷多少天實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Java輸入年度和月份判斷多少天的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解

    Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解

    這篇文章主要介紹了Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Swing圖形界面實(shí)現(xiàn)可動(dòng)態(tài)刷新的驗(yàn)證碼

    Swing圖形界面實(shí)現(xiàn)可動(dòng)態(tài)刷新的驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了Swing圖形界面實(shí)現(xiàn)可動(dòng)態(tài)刷新的驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SSH框架網(wǎng)上商城項(xiàng)目第4戰(zhàn)之EasyUI菜單的實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第4戰(zhàn)之EasyUI菜單的實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第4戰(zhàn)之EasyUI菜單的實(shí)現(xiàn),本文主要使用EasyUI技術(shù)簡(jiǎn)單實(shí)現(xiàn)后臺(tái)菜單,感興趣的小伙伴們可以參考一下
    2016-05-05
  • JAVA截取字符串的幾種常用方法

    JAVA截取字符串的幾種常用方法

    這篇文章主要給大家介紹了關(guān)于JAVA截取字符串的幾種常用方法, 在處理字符串的過(guò)程中有很多情況下會(huì)遇到需要截取字符串的情況,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09

最新評(píng)論