devtools热部署

依赖:

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

optional=true, 依赖不会传递, 该项目依赖devtools;之后依赖boot项目的项目如果想要使用devtools, 需要重新引入。

application.properties配置:

#热部署生效
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包。 

intelli idea配置devtool自动重启后,代码不生效的解决方法:

修改了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