Spring boot 官网学习笔记 - Spring DevTools 介绍
想要使用devtools支持,只需使用dependencies将模块依赖关系添加到你的构建中
- 运行打包的应用程序时,开发人员工具会自动禁用。如果你通过
java -jar或者其他特殊的类加载器进行启动时,都会被认为是“生产环境的应用”。 - 功能
- 去除服务器端缓存、客户端缓存默认设置
Spring Boot 支持的一些库中会使用缓存来提高性能。例如模版引擎将缓存编译后的模板,以避免重复解析模板文件。 此外,Spring MVC可以在服务静态资源时向响应中添加HTTP缓存头。
虽然缓存在生产中非常有益,但它在开发过程中可能会产生反效果,它会阻止你看到刚刚在应用程序中进行的更改。 因此,spring-boot-devtools将默认禁用这些缓存选项
- 缓存选项通常在
application.properties文件中配置。 例如,Thymeleaf提供了spring.thymeleaf.cache属性。spring-boot-devtools模块不需要手动设置这些属性,而是自动应用合理的开发时配置。
- 自动重启
spring-boot-devtools会在类路径上的文件发生更改时自动重启。- 默认情况下会监视类路径上的所有变动
- 当DevTools监视类路径资源时,触发重启的唯一方法是更新类路径。 导致类路径更新的方式取决于你正在使用的IDE。在Eclipse中,保存修改的文件将导致类路径被更新并触发重启。 在IntelliJ IDEA中,构建项目( Build -> Make Project )将具有相同的效果。
- Spring Boot提供的重新启动技术使用了两个类加载器。 不改变的类(例如,来自第三方jar的)被加载到 base 类加载器中。 你正在开发的类被加载到 restart 类加载器中。 当应用程序重启时, restart加载器将被丢弃,并创建一个新的类加载器。 这种方法意味着应用程序重启通常比“冷启动”快得多,因为 base 加载器已经已加载并且可用。
- 排除资源
- 某些资源在更改时不一定需要触发重启。 例如,可以直接编辑Thymeleaf模板。 默认情况下,更改/META-INF/maven , /META-INF/resources , /resources , /static , /public或/templates中的资源不会触发重启,但会触发实时重新加载。 如果要自定义这些排除项,可以使用spring.devtools.restart.exclude属性。 例如,要仅排除/static和/public你将设置以下内容
- spring.devtools.restart.exclude = static / **,public / **

- 监控额外的路径
- 当你对不在类路径中的文件进行更改时,可能需要重启或重新加载应用程序。 为此,请使用spring.devtools.restart.additional-paths属性来配置监视其他路径的更改。 你可以使用上述的spring.devtools.restart.exclude属性来控制附加路径下的更改是否会触发完全重启或只是实时重新加载 。
- 禁用重启
如果不想使用重启功能,可以使用spring.devtools.restart.enabled属性来禁用它。 在大多数情况下,你可以在application.properties中设置此项(这仍将初始化重启类加载器,但不会监视文件更改)。
例如,如果你需要完全禁用重启支持,因为它不适用于特定库,则需要在调用SpringApplication.run(…)之前设置System属性。 例如
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApp.class, args);
}
- 使用触发文件
如果你使用自动编译已更改文件的IDE,则可能希望仅在特定时间触发重启。 为此,你可以使用“触发文件”,这是一个特殊文件,当你要实际触发重启检查时,必须修改它。 更改文件只会触发检查,只有在Devtools检测到它必须执行某些操作时才会重启。 触发文件可以手动更新,也可以通过IDE插件更新。
要使用触发器文件,请使用spring.devtools.restart.trigger-file属性。
- 自定义重启类加载器
如上面重新启动和重新加载部分所述,重启功能是通过使用两个类加载器实现的。 对于大多数应用程序,此方法运行良好,但有时可能会导致类加载问题。
默认情况下,IDE中的任何打开的项目都会使用“restart”类加载器加载,任何常规.jar文件将使用“base”类加载器加载。 如果你在多模块项目上工作,但不是每个模块都导入到IDE中,则可能需要自定义配置。 为此,你可以创建一个META-INF/spring-devtools.properties文件。
spring-devtools.properties文件可以包含restart.exclude. 和restart.include. 前缀的属性。 include元素是应该被放入“restart”类加载器的项目, exclude元素是应该放入“base”类加载器的项目。 属性的值是应用于类路径下的正则表达式。
例如:
restart.exclude.companycommonlibs=/mycorp-common-[\\w-]+\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar 针对通用Mapper,可以做如下配置: restart.include.mapper=/mapper-[\\w-\\.]+jar 所有属性的键值(名字,companycommonlibs 部分)必须是唯一的,只有 restart.exclude. 和 restart.include. 开头的属性有效。 所有类路径下面的 META-INF/spring-devtools.properties 配置文件都会生效,所以你可以把该配置打包到每个模块中。 注:新版本的Mapper(3.4.+)会默认增加该配置。
- 已知限制
重启功能对使用标准ObjectInputStream对象序列化的对象不是很好 。如果需要反序列化数据,可能需要使用Spring的ConfigurableObjectInputStream配合Thread.currentThread().getContextClassLoader() 使用。
不幸的是,一些第三方库都不考虑在使用上下文类加载器的情况下反序列化。 如果你发现这样的问题,你需要向原作者请求修复。
- 实时加载
spring-boot-devtools模块包含嵌入式LiveReload服务器,可以在资源更改时用于触发浏览器刷新。 LiveReload浏览器扩展程序支持Chrome,Firefox和Safari,你可以从livereload.com免费下载。
如果你不想在应用程序运行时启动LiveReload服务器,则可以将spring.devtools.livereload.enabled属性设置为false 。
同一时间只能运行一个LiveReload服务器。 开始应用程序之前,请确保没有其他LiveReload服务器正在运行。如果从IDE启动多个应用程序,则只有第一个应用程序将支持LiveReload。
- 全局设置
你可以通过向$HOME文件夹添加名为.spring-boot-devtools.properties的文件来配置全局devtools设置(请注意,文件名以“.”开头)。 添加到此文件的任何属性将适用于你的计算机上使用devtools的所有 Spring Boot应用程序。 例如,要配置重启始终使用触发器文件 ,你可以添加以下内容:
〜/ .spring-boot-devtools.properties。
spring.devtools.reload.trigger-file=.reloadtrigger
- 去除服务器端缓存、客户端缓存默认设置
- 添加依赖
- 将依赖标记为
optional可选是一种最佳做法,可以防止将devtools依赖传递到其他模块中 <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
- 将依赖标记为
Spring boot 官网学习笔记 - Spring DevTools 介绍的更多相关文章
- Spring boot 官网学习笔记 - Spring Boot 属性配置和使用(转)-application.properties
Spring Boot uses a very particular PropertySource order that is designed to allow sensible overridin ...
- Spring boot 官网学习笔记 - Spring Boot CLI 入门案例
安装CLI https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/2.1.1.RELEASE/spring-b ...
- Spring boot 官网学习笔记 - logging
commons-logging和slf4j是java中的日志门面,即它们提供了一套通用的接口,具体的实现可以由开发者自由选择.log4j和logback则是具体的日志实现方案. 比较常用的搭配是com ...
- Spring boot 官网学习笔记 - Auto-configuration(@SpringBootApplication、@EnableAutoConfiguration、@Configuration)
Spring Boot auto-configuration attempts to automatically configure your Spring application based on ...
- Spring boot 官网学习笔记 - Using Spring Boot without the Parent POM,但是还要使用Parent POM提供的便利
If you do not want to use the spring-boot-starter-parent, you can still keep the benefit of the depe ...
- Spring boot 官网学习笔记 - 开发第一个Spring boot web应用程序(使用mvn执行、使用jar执行)
Creating the POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...
- Spring boot 官网学习笔记 - Configuration Class(@import)
推荐使用 Java-based configuration ,也可以使用xml we generally recommend that your primary source be a single ...
- Spring Boot的学习之路(02):和你一起阅读Spring Boot官网
官网是我们学习的第一手资料,我们不能忽视它.却往往因为是英文版的,我们选择了逃避它,打开了又关闭. 我们平常开发学习中,很少去官网上看.也许学完以后,我们连官网长什么样子,都不是很清楚.所以,我们在开 ...
- Spring Boot 2.0 学习笔记(一)——JAVA EE简介
本章内容:JAVA EE>Spring>Spring Boot 一.JAVA EE简介 1.1 Java ee优点:结束了Web开发的技术无序状态,让程序员.架构师用同一种思维去思考如何架 ...
随机推荐
- CentOS -- Zookeeper installation and configure
1 JDK 1.8 must installed first 2 Get Zookeeper package wget https://archive.apache.org/dist/zookeepe ...
- (二)快速搭建 ASP.net core Web 应用
目录 1. 新建项目并上传Github 2. 关联Jenkins实现持续集成 3. 已经磨好枪了,开始写代码 1. 新建项目并上传Github 新建 ASP.NET Core Web 应用程序,勾选“ ...
- 刨死你系列——HashMap(jdk1.8)
本文的源码是基于JDK1.8版本,在学习HashMap之前,先了解数组和链表的知识. 数组:数组具有遍历快,增删慢的特点.数组在堆中是一块连续的存储空间,遍历时数组的首地址是知道的(首地址=首地址+元 ...
- 2019nc#5
题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A digits 2 点击查看 1017/2384 通过 B generator 1 点击查看 567/3692 通过 C generato ...
- CSS动效集锦,视觉魔法的碰撞与融合(二)
引言 长久以来,我认识到.CSS,是存在极限的.正如曾经替你扛下一切的那个男人,也总有他眼含热泪地拼上一切,却也无法帮你做到的事情,他只能困窘地让你看到他的无能为力,怅然若失. 然后和曾经他成长的时代 ...
- ui、li模拟下拉框
转载:原文地址:https://www.jianshu.com/p/e303e0298e9e 效果图: HTML: <div class="rank_top"> < ...
- 【Redis】基本数据类型
一.概述 二.String(字符串) 三.List(列表) 四.Hash(字典) 五.Set(集合) 六.Sorted Set(有序集合) 一.概述 Redis目前支持5种数据类型,分别是: Stri ...
- 【Offer】[60] 【n个骰子的点数】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S.输入n,打印出s的所有可能的值出现的概率. [牛客网刷题地址]无 思路分析 递归的方 ...
- 8 分钟入门 K8s | 详解容器基本概念
作者| 阿里巴巴高级开发工程师 傅伟 一.容器与镜像 什么是容器? 在介绍容器的具体概念之前,先简单回顾一下操作系统是如何管理进程的. 首先,当我们登录到操作系统之后,可以通过 ps 等操作看到各式各 ...
- spring boot启动加载项CommandLineRunner
spring boot启动加载项CommandLineRunner 在使用SpringBoot构建项目时,我们通常有一些预先数据的加载.那么SpringBoot提供了一个简单的方式来实现–Comman ...