springboot熱部署之spring-boot-devtools

1 場(chǎng)景

基于springboot進(jìn)行開(kāi)發(fā)固蛾,開(kāi)發(fā)過(guò)程中搪缨,如果每次修改代碼都將項(xiàng)目重啟,將耗費(fèi)大量的時(shí)間成本挚币。

目前java虛擬機(jī)只能識(shí)別方法體內(nèi)的內(nèi)容更改亮蒋,如果修改整個(gè)類或者更改配置文件,仍然需要重啟java虛擬機(jī)妆毕。

使用spring-boot-devtools慎玖,可以實(shí)現(xiàn)指定目錄(默認(rèn)為classpath路徑)下的文件進(jìn)行更改后,項(xiàng)目自動(dòng)重啟笛粘,更改后的代碼自動(dòng)生效趁怔。

2 開(kāi)發(fā)環(huán)境

springboot版本:2.2.9.RELEASE

開(kāi)發(fā)工具:IDEA

3 原理

spring-boot-devtools使用了兩個(gè)類加載器ClassLoader,一個(gè)ClassLoader加載不會(huì)發(fā)生更改的類第三方j(luò)ar包)薪前,另一個(gè)ClassLoader(restart ClassLoader)加載會(huì)更改的類自定義的類)润努。

后臺(tái)啟動(dòng)一個(gè)文件監(jiān)聽(tīng)線程(File Watcher),監(jiān)測(cè)的目錄中的文件發(fā)生變動(dòng)時(shí)示括,原來(lái)的restart ClassLoader被丟棄铺浇,將會(huì)重新加載新的restart ClassLoader。

因?yàn)槲募儎?dòng)后例诀,第三方j(luò)ar包不再重新加載随抠,只加載自定義的類,加載的類比較少繁涂,所以重啟比較快拱她。

這也是為什么,同樣是重啟應(yīng)用扔罪,為什么不手動(dòng)重啟秉沼,建議使用spring-boot-devtools進(jìn)行熱部署重啟。

4 步驟

4.1 maven配置

需要進(jìn)行熱部署的項(xiàng)目中,pom文件增加對(duì)應(yīng)的maven依賴唬复。

開(kāi)啟maven打包插件中的鉤子配置fork(devtools基于打包的鉤子配置)矗积。

<dependencies>
    <!-- devtools熱部署依賴 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <!-- 防止將依賴傳遞到其他模塊中 -->
        <optional>true</optional>
        <!-- 只在運(yùn)行時(shí)起作用,打包時(shí)不打進(jìn)去(防止線上執(zhí)行打包后的程序敞咧,啟動(dòng)文件監(jiān)聽(tīng)線程File Watcher棘捣,耗費(fèi)大量的內(nèi)存資源) -->
        <scope>runtime</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- devtools依賴此配置(否則,devtools不生效)休建。 -->
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>

4.2 devtools配置

默認(rèn)devtools的exclude內(nèi)容如下(設(shè)置exclude屬性后乍恐,默認(rèn)的配置將被覆蓋):

META-INF/maven/**,META-INF/resources/**,resources/**,static/**,public/**,templates/**
,**/*Test.class,**/*Tests.class,git.properties,META-INF/build-info.properties

yml配置如下:

spring:
  devtools:
    restart:
      # 開(kāi)啟熱部署(更改文件后,自動(dòng)重啟)
      enabled: true
      ## 設(shè)置哪些資源變動(dòng)后不觸發(fā)熱部署测砂,會(huì)覆蓋默認(rèn)的exclude內(nèi)容(資源不會(huì)觸發(fā)重啟茵烈,但會(huì)觸發(fā)實(shí)時(shí)重新加載)
      # exclude: WEB-INF/**,static/**
      ## 監(jiān)控額外的路徑(優(yōu)先于exclude)
      # additional-paths: src/main/java

4.3 IDEA配置

IDEA需開(kāi)啟運(yùn)行時(shí)編譯

設(shè)置1:

File->Setting->Build,Execution,Deployment->Compile

勾選:Make project automatically

設(shè)置2:

快捷鍵:ctrl+alt+shift+/

選擇:Registry

勾選:compiler.automake.allow.when.app.running

5 注意事項(xiàng)

  • 默認(rèn)監(jiān)聽(tīng)classpath路徑下的文件更改
  • devtools只適用于開(kāi)發(fā)環(huán)境。線上環(huán)境不可開(kāi)啟砌些,可通過(guò)設(shè)置maven依賴中的scope屬性為runtime來(lái)實(shí)現(xiàn)呜投,打包時(shí)不將devtools打包到j(luò)ar包中
  • devtools需配置在需要進(jìn)行熱部署的模塊的pom中存璃,且不能向上傳遞仑荐,不可配置在基礎(chǔ)依賴模塊中。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纵东,一起剝皮案震驚了整個(gè)濱河市释漆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌篮迎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件示姿,死亡現(xiàn)場(chǎng)離奇詭異甜橱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)栈戳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門岂傲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人子檀,你說(shuō)我怎么就攤上這事镊掖。” “怎么了褂痰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵亩进,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缩歪,道長(zhǎng)归薛,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮主籍,結(jié)果婚禮上习贫,老公的妹妹穿的比我還像新娘。我一直安慰自己千元,他們只是感情好苫昌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著幸海,像睡著了一般祟身。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涕烧,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天月而,我揣著相機(jī)與錄音,去河邊找鬼议纯。 笑死父款,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瞻凤。 我是一名探鬼主播憨攒,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阀参!你這毒婦竟也來(lái)了肝集?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蛛壳,失蹤者是張志新(化名)和其女友劉穎杏瞻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體衙荐,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捞挥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忧吟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砌函。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖溜族,靈堂內(nèi)的尸體忽然破棺而出讹俊,到底是詐尸還是另有隱情,我是刑警寧澤煌抒,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布仍劈,位于F島的核電站,受9級(jí)特大地震影響摧玫,放射性物質(zhì)發(fā)生泄漏耳奕。R本人自食惡果不足惜绑青,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屋群。 院中可真熱鬧闸婴,春花似錦、人聲如沸芍躏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)对竣。三九已至庇楞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間否纬,已是汗流浹背吕晌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留临燃,地道東北人睛驳。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像膜廊,于是被迫代替她去往敵國(guó)和親乏沸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354