spring boot devtools
依赖
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 运行时,生效。