依赖:
<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