Spring Boot Devtools 依賴詳解


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,就能看到應用所使用的數據。

每天學習一點點,每天進步一點點。


免責聲明!

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



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