IDEA SpringBoot 熱部署


參考文獻:

https://blog.csdn.net/qq_42685050/article/details/81588584

https://juejin.cn/post/6844904121821036552

https://blog.csdn.net/lisheng19870305/article/details/94620716

 

近來在使用idea做springboot的項目,但是發現每次修改之后我都需要重新將項目關閉再開啟,這樣比較繁瑣,發現通過熱部署的方式讓我們可以一邊修改我們的項目,然后在頁面中直接通過刷新展示出來

spring為開發者提供了一個名為spring-boot-devtools的模塊來使Spring Boot應用支持熱部署,提高開發者的開發效率,無需手動重啟Spring Boot應用。

devtools的原理

深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另一個ClassLoader加載會更改的類,稱為restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,重新創建一個restart ClassLoader,由於需要加載的類相比較少,所以實現了較快的重啟時間。

這里我沒有把所有的方式都嘗試一遍,只是使用了devtools的方式

總的來說,一共需要兩個步驟:

第一步、先設置我們的pom.xml文件,加入依賴

首先是把下面代碼在<dependencies>中

<!--添加熱部署-->
 
<dependency>
 
<groupId>org.springframework.boot</groupId>
 
<artifactId>spring-boot-devtools</artifactId>
 
<optional>true</optional>
 
<scope>true</scope>
 
</dependency>

  

 

另外下面的代碼是放在<build>  下面<plugins>里的

<plugin>
 
<!--熱部署配置-->
 
<groupId>org.springframework.boot</groupId>
 
<artifactId>spring-boot-maven-plugin</artifactId>
 
<configuration>
 
<!--fork:如果沒有該項配置,整個devtools不會起作用-->
 
<fork>true</fork>
 
</configuration>
 
</plugin>

  

第二步、設置IDEA的自動編譯:

(1)File-Settings-Compiler勾選 Build Project automatically

(2)快捷鍵 ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running

這樣我們的熱部署就完成了,可以再我們的項目中修改返回值,或者修改Mapping的value值后,在我們的頁面中刷新試試,

我們的修改已經生效了,不用通過再關閉再開啟項目查看了。


spring-boot-devtools 介紹

  • spring-boot-devtools 是一個為開發者服務的模塊,可以實現 Spring Boot 熱部署,其中最重要的功能就是自動將應用代碼更改到最新的 App 上面去。

  • spring-boot-devtools 可以實現頁面熱部署,實現類文件熱部署(類文件修改后不會立即生效),實現對屬性配置文件的熱部署。其原理是 spring-boot-devtools 會監聽 Classpath 下的文件變動,並且會立即重啟應用(發生在保存時機)。

  • 由於采用的虛擬機機制,重啟的時候只是加載了在開發的 Class,沒有重新加載第三方的 JAR 包,所以重啟是很快的。

配置熱部署

  • 在 pom.xml 文件中,添加項目 spring-boot-devtools 依賴
<!--熱部署依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
 </dependency>

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!--沒有該項配置,熱部署不會起作用-->
    <configuration>
        <fork>true</fork>
    </configuration>
 </plugin>

  

  • 在資源文件 application.properties 中進行熱部署的相關配置
# 頁面修改后立即生效,關閉緩存,立即刷新
spring.thymeleaf.cache=false
# 熱部署生效
spring.devtools.restart.enabled=true
# 設置需要重啟的目錄
spring.devtools.restart.additional-paths=src/java/main
# 設置不需要重啟的目錄
spring.devtools.restart.exclude=static/**,public/**,WEB-INF/**
# 為 mybatis 設置,生產環境可刪除
# restart.include.mapper=/mapper-[\\w-\\.]+jar
# restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar

  

 

當熱部署搭建完成后,程序只要啟動一次即可,后面修改代碼時,只需保存后便可以觸發熱部署機制,自動重啟服務。

設置 IDEA 環境自動編譯

在使用 IDEA 編譯器時,需要設置自動編譯。

  • 在編譯器選項中勾選 Build project automatically 選項

 

 

  • 使用快捷鍵:Ctrl + Alt + Shift + / 調出 Registry 窗口,勾選 compiler.automake.allow.when.app.running 選項

 

 

源碼地址

springboot-devtools


具體步驟

一、開啟IDEA的自動編譯(靜態)

具體步驟:打開頂部工具欄 File -> Settings -> Default Settings -> Build -> Compiler 然后勾選 Build project automatically 。

二、開啟IDEA的自動編譯(動態)

具體步驟:同時按住 Ctrl + Shift + Alt + / 然后進入Registry ,勾選自動編譯並調整延時參數。

  • compiler.automake.allow.when.app.running -> 自動編譯
  • compile.document.save.trigger.delay -> 自動更新文件

PS:網上極少有人提到compile.document.save.trigger.delay 它主要是針對靜態文件如JS CSS的更新,將延遲時間減少后,直接按F5刷新頁面就能看到效果!

三、開啟IDEA的熱部署策略(非常重要)

具體步驟:頂部菜單- >Edit Configurations->SpringBoot插件->目標項目->勾選熱更新。

image.png

四、在項目添加熱部署插件(可選)

溫馨提示:
如果因為舊項目十分臃腫,導致熱重啟很慢而影響開發效率,筆者建議直接在POM移除spring-boot-devtools依賴,然后使用Control+Shift+F9進行免啟動快速更新!!

具體步驟:在POM文件添加熱部署插件

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

  

五、關閉瀏覽器緩存(重要)

打開谷歌瀏覽器,打開F12的Network選項欄,然后勾選【✅】Disable cache 。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM