Spring Boot Devtools 是什么?
顧名思義,DevTools為Spring開發人員提供了一些便利的開發期工具,其中包括:
-
代碼變更后應用會自動重啟;
-
當面向瀏覽器的資源(如模板、JavaScript、樣式表)等發生變化時,會自動刷新瀏覽器;
-
自動禁用模板緩存;
-
如果使用H2數據庫的話,內置了H2控制台。
如何使用 Spring Boot Devtools ?
使用 Spring Boot Devtools,只需在 pom.xml 文件中,添加如下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
在 IDEA 中添加如上依賴后,Spring Boot Devtools 並不會生效,需要手動開啟項目自動編譯功能,才能生效。
具體操作,參考文章 Spring-boot-devtools 在Idea中不起作用解決辦法
應用自動重啟
當DevTools運行的時候,應用程序會被加載到Java虛擬機(Java virtual Machine,JVM)兩個獨立的類加載器中。其中一個類加載器會加載你的Java代碼、屬性文件以及項目中“src/main/”路徑下幾乎所有的內容。
這些條目很可能會經常發生變化。另外一個類加載器會加載依賴的庫,這些庫不太可能經常發生變化。
當探測到變更的時候,DevTools只會重新加載包含項目代碼的類加載器,並重啟Spring的應用上下文,在這個過程中另外一個類加載器和JVM會原封不動。這個策略非常精細,但是它能減少應用啟動的時間。
這種策略的一個不足之處就是自動重啟無法反映依賴項的變化。這是因為包含依賴庫的類加載器不會自動重新加載。這意味着每當我們在構建規范中添加、變更或移除依賴的時候,為了讓變更生效,我們需要重新啟動應用。
瀏覽器自動刷新和禁用模板緩存
默認情況下,像Thymeleaf和FreeMarker這樣的模板方案在配置時會緩存模板解析的結果。這樣的話,在為每個請求提供服務的時候,模板就不用重新解析了。
在生產環境中,這是一種很好的方式,因為它會帶來一定的性能收益。但是,在開發期,緩存模板就不太好了。在應用運行的時候,如果緩存模板,那么我們刷新瀏覽器就無法看到模板變更的效果了。即便我們對模板做了修改,在應用重啟之前,緩存的模板依然會有效。
DevTools通過禁用所有模板緩存解決了這個問題。你可以對模板進行任意數量的修改,只需要刷新一下瀏覽器就能看到結果。
內置的H2控制台
如果你使用H2數據庫進行開發,DevTools將會自動啟用H2。這樣的話,我們可以通過Web瀏覽器進行訪問。
你只需要讓瀏覽器訪問http://localhost:8080/h2-console,就能看到應用所使用的數據。
每天學習一點點,每天進步一點點。