# 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