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
因為其采用的虛擬機機制,該項重啟是很快的
(1)base classloader (Base類加載器):加載不改變的Class,例如:第三方提供的jar包。
(2)restart classloader(Restart類加載器):加載正在開發的Class。
為什么重啟很快,因為重啟的時候只是加載了在開發的Class,沒有重新加載第三方的jar包。
注:編譯器設置自動編譯