在項目的開發中,當每次修改了後臺代碼後都需要重啓服務,這樣降低了開發效率。下面將介紹在SpringBoot項目中使用DevTools實現熱部署。
spring-boot-devtools是一個爲開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。原理是在發現代碼有更改之後,重新啓動應用,但是速度比手動停止後再啓動還要更快,更快指的不是節省出來的手工操作的時間。
深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另一個ClassLoader加載會更改的類,稱爲restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,重新創建一個restart ClassLoader,由於需要加載的類相比較少,所以實現了較快的重啓時間。
1、添加DevTools模塊
方法一:在創建SpringBoot項目時選擇添加模塊
方法二:pom.xml文件的配置
<!-- 引入devtools熱部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
2、編輯application.yml配置文件
在application.yml配置文件中添加相關配置信息。
spring:
devtools:
restart:
enabled: true #設置開啓熱部署
additional-paths: src/main/java #重啓目錄
exclude: WEB-INF/**
thymeleaf:
cache: false #使用Thymeleaf模板引擎,關閉緩存
3、IDEA的相關設置
(1)菜單:File → Settings → Build, Execution, Deployment → Compiler
在右側的選項中找到 Build project automatically 選項並勾選,如下圖:
(2)快捷鍵 Ctrl + Shift + Alt + / ,點擊Registry項。
然後找到 compiler.automake.allow.when.app.running 選項並勾選,如下圖:
4、解決靜態文件不更新的問題
當我們更改了靜態文件(如:HTML頁面)後,也希望刷新瀏覽器後能夠看到修改效果。
(1)首先在application.yml配置文件中要關閉Thymeleaf模板引擎的緩存。
(2)設置SpringBoot容器。
將 On frame deactivation 選項設置爲: Update classes and resources,如下圖:
這樣當我們修改了靜態文件HTML文件,保存後,直接刷新瀏覽器就可以看到修改後的效果了。