使用spring-boot-devtools 的用处:
- 默认禁用缓存选项。比如模板引擎将缓存编译完的模板,以避免重复解析模板文件。
- 自动重启。只要classpath下的文件有变动,应用就会自动重启。
在运行一个完整的,打包过的应用时,开发者工具(devtools)会被自动禁用。
如果应用使用 java -jar 或特殊的类加载器启动,都会被认为是一个产品级的应用(production application),从而禁用开发者工具。
1. 自动重启
只要在pom中添加spring-boot-devtools
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
只要classpath下文件有变动,应用就会重启。更妙的是,一些比如静态assets、视图模板文件等资源 文件的变动,应用不会重启。
唯一触发重启的方式就是更新classpath
总结
- 添加
spring-boot-devtools
依赖 - 修改classpath下的Java文件,然后更新classpath,这时应用就会自动重启。
- 修改classpath下的Java文件,然后更新classpath,但是访问页面可以看到效果(即重新加载)。
IDEA更新classpath的方法:【Build】->【Build Project】,如果你设置了自动编译,那就可以省略这一步了。
注意
有的文章说必须设置以下内容,devtools才能生效。可能因为我用的版本是springboot2.1.2.RELEASE,项目中没有设置下面内容,devtools 照样能生效。
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
原理
Restart vs Reload Spring Boot提供的重启技术是通过使用两个类加载器实现的。
没有变化的类(比如那些第三方jars)会加载进一个基础的类加载器,正在开发的类会加载进一个重启的类加载器。
当应用重启时,重启的类加载器会被丢弃,并创建一个新的。
这种方式意味着应用重启通常比冷启动快很多,因为基础类加载器已经可用并且填充完成
gitee项目代码地址 /springboot02
网友评论