Spring Boot(20)——devtools介绍
Spring Boot devtools介绍
Spring Boot提供了一个spring-boot-devtools
jar包,提供了一些方便程序开发的功能,主要是监控程序的变化,然后进行自动重新启动。使用spring-boot-devtools
需要在pom.xml中添加如下依赖项,同时需要设置<optional>true</optional>
。spring-boot-devtools
默认将只在开发环境生效,通过Spring Boot插件打包时默认是不会包含spring-boot-devtools
。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
默认情况下,当devtools检测到classpath下有文件内容变更时,它会对当前Spring Boot应用进行重新启动。但它的重新启动并不是完整的重启整个应用。它的应用的重启是基于两个不同的ClassLoader进行的,根ClassLoader将负责加载第三方jar包中的内容,而当前应用中的Class、配置文件等资源则使用一个可重新加载的ClassLoader进行加载,叫RestartClassLoader。当检测到有内容变更时,Spring Boot会弃用原来的RestartClassLoader,然后重新创建一个新的RestartClassLoader来加载当前应用的Class等资源。这种设计可以让程序快速的进行重启,因为这个时候第三方jar包中的资源已经在第一次启动的时候进行加载了,自动重启的时候已经不再加载它了,而且在开发的时候,希望改动后立马生效的通常也是应用中自己定义的Class及其它资源。但如果你期望第三方jar文件的变动也会触发devtools进行自动重启,则可以创建META-INF/spring-devtools.properties
,在文件中通过restart.include.xxx
指定需要自动重启的jar,通过restart.exclude.xxx
指定不需要自动重启的jar,属性值采用正则表达式匹配。所有的属性名必须是唯一的,它们的前缀必须是restart.include.
或restart.exclude.
,至于后面的内容是无所谓的。比如下面的配置就指定了所有的以mycorp-common-
打头的jar包不参与自动重启,而所有的以mycorp-myproj-
打头的jar包需要参与自动重启。
restart.exclude.companycommonlibs=/mycorp-common-[\\w-]+\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar
默认情况下,/META-INF/maven, /META-INF/resources, /resources, /static, /public, 和 /templates下面的资源的变化不会触发自动重启。如果用户期望其它资源文件的变更也不会进行自动重启,则可以在application.properties
文件中通过spring.devtools.restart.exclude
属性进行指定,比如不想在更改application.properties
文件的时候进行自动重启,可以进行如下配置。
spring.devtools.restart.exclude=application.properties
如果想监听非Classpath路径下的文件的变更进行自动重启,则可以通过spring.devtools.restart.additional-paths
属性进行指定。
如果你想禁用devtools的自动重启功能,则可以指定spring.devtools.restart.enabled=false
,也可以在Spring Boot启动的main程序中,在调用SpringApplication.run(..)
之前指定系统属性spring.devtools.restart.enabled
为false。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(Application.class, args);
}
}
如果你不想在改变ClassPath路径下的任何文件后立马就进行自动重启,而是希望在更改了很多文件后,在更改了一个特殊的文件后自动触发自动重启,则可以通过spring.devtools.restart.trigger-file
属性指定触发自动重启的文件,这样当该文件的内容发生了变更后将会触发自动重启。比如下面的配置就表示当更改了application.properties
文件的内容时将触发自动重启。
spring.devtools.restart.trigger-file=application.properties
上面的针对devtools的配置都是基于单个项目的配置,如果希望上述配置能够针对所有的项目都生效,则可以在HOME目录下新建一个.spring-boot-devtools.properties
文件(注意文件名是以点开头的),在其中定义那些配置属性。
参考文档
https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/html/using-boot-devtools.html
推荐阅读
-
Spring Boot集成spring-boot-devtools开发时实现热部署的方式
-
Intellij IDEA 2017新特性之Spring Boot相关特征介绍
-
spring boot使用thymeleaf为模板的基本步骤介绍
-
spring-boot-klock-starter V1.1 主体功能重大更新内容介绍
-
spring boot与spring mvc的区别及功能介绍
-
解决Intellij IDEA 使用Spring-boot-devTools无效的问题
-
spring boot devtools在Idea中实现热部署方法
-
Spring Boot 配置 IDEA和DevTools 热部署的方法
-
spring-boot-klock-starter V1.1 主体功能重大更新内容介绍
-
spring boot devtools在Idea中实现热部署方法