Spring Boot 使我们能够快速设置和运行服务。为了进一步增强开发体验,Spring 发布了 spring-boot-devtools 工具——作为 Spring Boot-1.3 的一部分 spring-boot-devtools 是 Spring Boot 提供的一组开发工具,可以提高开发者的工作效率,开发者可以将该模块包含在任何项目中,spring-boot-devtools 最方便的地方莫过于热部署了。 ~ 本篇内容包括:spring-boot-devtools 模块介绍、SpringBoot devtools 实战
Spring Boot 使我们能够快速设置和运行服务。为了进一步增强开发体验,Spring 发布了 spring-boot-devtools 工具——作为 Spring Boot-1.3 的一部分
spring-boot-devtools 是 Spring Boot 提供的一组开发工具,可以提高开发者的工作效率,开发者可以将该模块包含在任何项目中,spring-boot-devtools 最方便的地方莫过于热部署了。
热部署一般是指,开发过程中使用开发者不想因为修改内容后重启服务浪费大量的时间,而是希望修改代码后能够快速加载自己修改的方法或者类。节省开发时间,为开发者提供改好的开发体验。
SpringBoot devtools实现 热部署说明:
# 在 pom.xml 文件中添加 Maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
optional 选项,是为了防止将 devtools 依赖传递到其他模块中。当开发者将应用打包运行后,devtools 会被自动禁用。spring-boot-devtools 默认将只在开发环境生效,通过 Spring Boot 插件打包时默认是不会包含 spring-boot-devtools。
当开发者将 spring-boot-devtools 引入项目后,只要 classpath 路径下发生变化,项目就会自动重启,这极大地提高了项目的开发速度。
# 单击 File -> settings 菜单,打开 settings 页面,在左边的菜单栏依次找到 Build,Execution,Deployment -> Compile,勾选 Build project automatically :
# 按住 Ctrl+Shift+Alt+/
快捷捷键调出 Maintenance 页面
# 选择 Registry
,在新打开的 Registry 页面中,勾选compiler.automake.allow.when.app.running
复选框。配置完成后,若开发者修改了代码则将会自动重启。
Ps:classpath 路径下的静态资源或者视图模板等发生变化时,并不会导致项目重启。
默认情况下,/META-INF/maven、/MET A-INF/resources、/resources、/static 、/public 以及 /templates 位置下资源的变化并不会触发重启,如果开发者想要对这些位置进行重定义 ,在 application.properties 中添加如下配置即可:
spring.devtools.restart.exclude=static/**
这表示从默认的不触发重启的目录中除去 static 目录,即 classpat:static 目录下的资源发生变化时也会导致项目 重启。用户也可以反向配置需要监控的目录,配置方式如下:
spring.devtools.restart.additional-exclude=src/main/resources/static
这个配置表示当 src/main/resources/static 目录下的文件发生变化时,自动重启项目。
由于项目的编码过程是一个连续的过程,并不是每修改一行代码就要重启项目,这样不仅浪费电脑性能,而且没有实际意义。鉴于这种情况,开发者也可以考虑使用触发文件,触发文件是个特殊的文件,当这个文件发生变化时项目就会重启,配置方式如下:
spring.devtools.restart.trigger-file=.trigger-file
在项目 resources 目录下新建一个名为 .trigger-file 的文件,此时当开发者修改代码时,默认情况下项目不会重启,需要项目重启时,开发者只需要修改 .trigger-file 文件即可,但是注意,如果项目没有改变,只是单纯地改变了 .trigger-file 文件,那么项目不会重启。
如果开发者添加了 spring-boot-devtools 模块但是不想使用自动重启特性,那么可以关闭自动重启。
spring.devtools.restart.enabled=false