# devtools熱部署
spring為開發者提供了一個名為spring-boot-devtools的模塊來使Spring Boot應用支持熱部署,提高開發者的開發效率,編碼過程不用反復重啟應用。ps:php在笑。。。
## 添加依賴和插件
在pom中添加devtools依賴
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
```
在dependencies外添加plugin插件
```
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
```
注意fork必須為true否則熱部署不生效
devtools的運行原理是檢測目錄里文件的變動,一旦發生改變就重新自動restart應用(第三方的jars不用重啟),就三四秒。**不過session值會被清空。**
## Thymeleaf模板頁面熱部署
直接在application.properties文件中配置
```spring.thymeleaf.cache=false```
## 關閉熱部署
在application.properties中配置
`spring.devtools.restart.enabled=false`,
此時restart類加載器還會初始化,但不會監視文件更新。
或在SprintApplication.run之前調用
`System.setProperty(“spring.devtools.restart.enabled”, “false”);`
## 指定和排除參與熱部署的內容
在application.properties中設置重啟的目錄
``spring.devtools.restart.additional-paths: src/main/java``
classpath目錄下的WEB-INF文件夾內容修改不重啟
``spring.devtools.restart.exclude: WEB-INF/**``
## IDEA設置
當我們修改了Java類后,IDEA默認是不自動編譯的,而spring-boot-devtools又是監測classpath下的文件發生變化才會重啟應用,所以需要設置IDEA的自動編譯:
1. File - Settings - Compiler - 勾上Build Project automatically
2. ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running