idea的熱載入與熱部署

一:熱載入與熱部署
    熱部署的意思就是不用手動重啟環境,修改類後,項目會自動重啟。但是如果項目比較大,重啟也需要耗時十幾秒左右。
    熱載入意為不需要重新啟動,修改了什麼文件就重新載入什麼文件,可以做到1,2秒左右就能看到效果。所以更節省時間。
    但是二者是互有利弊。熱部署的好處是,重新啟動,不存在修改文件和整個環境不一致的情況,而且是任何修改都生效。但是這裡的熱載入卻有限制。吾經過測試發現,至少在修改controller上方法的requestMapping時是不會馬上生效。因為這個是在啟動時就已經載入的,所以這也是熱載入修改什麼載入什麼帶來的必然結果。
 
二:熱部署
    熱部署網上有很多部落格,基本可以說是四步。
 
    1)修改build為自動編譯
    
 
 
2)允許運行時編譯:alt+ctrl+shift+/ 調出Registry,選中運行時編譯
 
3)添加pom依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>
 
4)maven編譯插件
<build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <fork>true</fork>
          <addResources>true</addResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
這種方式就是修改後會自動重新啟動,免去手工重啟。並不能實現不重啟而自動載入修改的類。
 
三:熱載入
    要做到熱載入需要兩步。一是編譯,二是載入。吾經過測試整理出以下:
    1)設置自動編譯,見2.1
 
    2)設置運行運行時編譯,見2.2
 
    3)設置手動「update」或者idea失去焦點時更新類與資源
 
 
4)以debug方式啟動
 
    這樣就能實現修改了類後,手動點擊「update” 即idea下面的 刷新按鈕,或者點開另外個程式,idea就會重新去載入更新的類。這時馬上就能看到更新效果。(項目沒有重啟,但是會看到idea有一個刷新的動作)。這種方式的局限性前文已有說到。
    吾測試時,有以下幾個坑。
    a)當不以debug方式啟動時,設置允許自動編譯後,就算反編譯類,發現已經更改,就算去手動刷新(ctrl+F10)也不會起作用。我猜想是因為idea內置快取的原因。所以必須以debug方式啟動。
 
四:結尾
    正常的方式是,我們在開發一個功能後,才需要啟動項目。或者debug方式去調試問題。至於說熱部署和熱載入,哪種更適合你的特殊需要,就格取所好吧!
 
Tags: