spring boot devtools

2018-07-16  本文已影响0人  金刚_30bf

依赖

Maven

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

Gradle

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}

注意:
当打包运行时devtools自动被禁止 。 当应用程序使用java -jar 或者特殊classloader启动时, 会认为是生产应用,devtools自动被禁止。

在maven中添加 optional 标签 或 Gradle中添加 compileOnly 是建议的方式, 它会组织依赖该工程的模块使用继承devtools 。

缓存

一般都会启用缓存以提供性能。
当使用devtools 时, 会自动禁用缓存 。
一般缓存启用与否的设置在application.properties中配置 ,如thymeleaf , 配置属性为 spring.thymeleaf.cache 。

可配置属性

如下是Devtools可支持的属性 :

    static {
        Map<String, Object> devToolsProperties = new HashMap<>();
        devToolsProperties.put("spring.thymeleaf.cache", "false");
        devToolsProperties.put("spring.freemarker.cache", "false");
        devToolsProperties.put("spring.groovy.template.cache", "false");
        devToolsProperties.put("spring.mustache.cache", "false");
        devToolsProperties.put("server.servlet.session.persistent", "true");
        devToolsProperties.put("spring.h2.console.enabled", "true");
        devToolsProperties.put("spring.resources.cache.period", "0");
        devToolsProperties.put("spring.resources.chain.cache", "false");
        devToolsProperties.put("spring.template.provider.cache", "false");
        devToolsProperties.put("spring.mvc.log-resolved-exception", "true");
        devToolsProperties.put("server.servlet.jsp.init-parameters.development", "true");
        devToolsProperties.put("spring.reactor.stacktrace-mode.enabled", "true");
        PROPERTIES = Collections.unmodifiableMap(devToolsProperties);
    }

自动重启

当classpath下的文件有变动时Devtools会自动重启 服务 。
默认会监视classpath下所有的目录 。注意某些资源,如静态资源和视图模板不需要重启应用。

注意 : Devtools监视classpath资源, 只要触发classpath下资源更新就会触发重新加载, 触发点依赖ide , 对于eclipse ,只要保存文件就会触发, 对于idea , Build -> Build Project 会触发。

注意: 默认情况下, gradle maven启动的应用程序也支持devtools 。
注意: Devtools依赖application context的shutdown hook , 若禁用了该hook SpringApplication.setRegisterShutdownHook(false),则不会正常其作用 。

日志

默认情况下,每次应用程序重新启动时,都会记录一个显示条件评估增量的报告。 该报告显示了在进行更改(例如添加或删除Bean以及设置配置属性)时对应用程序的自动配置所做的更改。

要禁用之: spring.devtools.restart.log-condition-evaluation-delta=false

排除监视的资源

默认情况下 修改如下资源/META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates 不会触发重启, 而是触发 重载 。
通过spring.devtools.restart.exclude 可自定义不重启的资源 。
如, 只排除/static and /public
spring.devtools.restart.exclude=static/**,public/**

若想保持默认的在附加,可以使用 spring.devtools.restart.additional-exclude .

监视其他路径

若想监视classpath之外的资源 , 可以使用 spring.devtools.restart.additional-paths

禁用重启

通过 spring.devtools.restart.enabled禁用重启。
若想完全禁用 , 需要在调用 SpringApplication.run(…​) 之前,设置system属性 :

public static void main(String[] args) {
    System.setProperty("spring.devtools.restart.enabled", "false");
    SpringApplication.run(MyApp.class, args);
}

Eclipse 环境

在eclipse 环境下, 当通过gradle 的 runJar命令运行程序时,Devtools不生效。
当通过Run Application 运行时,生效。

上一篇 下一篇

猜你喜欢

热点阅读