SpringBoot中使用spring-boot-devtools進行熱部署


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

devtools的原理

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

在pom中添加:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

optional=true, 依賴不會傳遞, 該項目依賴devtools;之后依賴boot項目的項目如果想要使用devtools, 需要重新引入。

application.properties配置:

              #thymeleaf是一個模板引擎,緩存的意思是加載一次模板之后便不會在加載了,對於生產環境應該加上緩存,但是在開發過程中如果打開緩存,不方便開發人員調試。試想一下,改一行html,就需要重啟服務器,肯定是不方便的

              spring.thymeleaf.cache=true

               #熱部署生效

    spring.devtools.restart.enabled=true

              #設置重啟的目錄,添加那個目錄的文件需要restart

              spring.devtools.restart.additional-paths=src/main/java
 

 

 
devtools會監聽classpath下的文件變動,並且會立即重啟應用(發生在保存時機)

因為其采用的虛擬機機制,該項重啟是很快的
(1)base classloader (Base類加載器):加載不改變的Class,例如:第三方提供的jar包。
(2)restart classloader(Restart類加載器):加載正在開發的Class。
為什么重啟很快,因為重啟的時候只是加載了在開發的Class,沒有重新加載第三方的jar包。

注:編譯器設置自動編譯


免責聲明!

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



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