Spring DevTools 介绍
Spring DevTools 介绍
Spring Boot包括一组额外的工具,可以使应用程序开发体验更加愉快。 spring-boot-devtools模块可以包含在任何项目中,它可以节省大量的时间。 想要使用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")
}
运行打包的应用程序时,开发人员工具会自动禁用。如果你通过
java -jar或者其他特殊的类加载器进行启动时,都会被认为是“生产环境的应用”。将依赖标记为
optional可选是一种最佳做法,可以防止将devtools依赖传递到其他模块中。Gradle 不支持开箱即用的optional依赖项,你可以参考propdeps-plugin。
一、属性默认值
Spring Boot 支持的一些库中会使用缓存来提高性能。例如模版引擎将缓存编译后的模板,以避免重复解析模板文件。 此外,Spring MVC可以在服务静态资源时向响应中添加HTTP缓存头。
虽然缓存在生产中非常有益,但它在开发过程中可能会产生反效果,它会阻止你看到刚刚在应用程序中进行的更改。 因此,spring-boot-devtools将默认禁用这些缓存选项。
缓存选项通常在application.properties文件中配置。 例如,Thymeleaf提供了spring.thymeleaf.cache属性。spring-boot-devtools模块不需要手动设置这些属性,而是自动应用合理的开发时配置。
二、自动重启
spring-boot-devtools会在类路径上的文件发生更改时自动重启。 这在IDE中工作时可能是一个有用的功能,因为它为代码更改提供了非常快的反馈循环。 默认情况下会监视类路径上的所有变动,但请注意,某些资源(如静态资源和视图模板)不需要重启应用程序。
触发重启
当DevTools监视类路径资源时,触发重启的唯一方法是更新类路径。 导致类路径更新的方式取决于你正在使用的IDE。在Eclipse中,保存修改的文件将导致类路径被更新并触发重启。 在IntelliJ IDEA中,构建项目(
Build -> Make Project)将具有相同的效果。重新启动和重新加载
Spring Boot提供的重新启动技术使用了两个类加载器。 不改变的类(例如,来自第三方jar的)被加载到 base 类加载器中。 你正在开发的类被加载到 restart 类加载器中。 当应用程序重启时, restart加载器将被丢弃,并创建一个新的类加载器。 这种方法意味着应用程序重启通常比“冷启动”快得多,因为 base 加载器已经已加载并且可用。
1. 排除资源
某些资源在更改时不一定需要触发重启。 例如,可以直接编辑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-exclude属性。
2. 监控额外的路径
当你对不在类路径中的文件进行更改时,可能需要重启或重新加载应用程序。 为此,请使用spring.devtools.restart.additional-paths属性来配置监视其他路径的更改。 你可以使用上述的spring.devtools.restart.exclude属性来控制附加路径下的更改是否会触发完全重启或只是实时重新加载 。
3. 禁用重启
如果不想使用重启功能,可以使用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);
}
4. 使用触发文件
如果你使用自动编译已更改文件的IDE,则可能希望仅在特定时间触发重启。 为此,你可以使用“触发文件”,这是一个特殊文件,当你要实际触发重启检查时,必须修改它。 更改文件只会触发检查,只有在Devtools检测到它必须执行某些操作时才会重启。 触发文件可以手动更新,也可以通过IDE插件更新。
要使用触发器文件,请使用spring.devtools.restart.trigger-file属性。
如果你希望将
spring.devtools.restart.trigger-file设置为全局配置,可以参考下面第四小节。
5. 自定义重启类加载器
如上面重新启动和重新加载部分所述,重启功能是通过使用两个类加载器实现的。 对于大多数应用程序,此方法运行良好,但有时可能会导致类加载问题。
默认情况下,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.1+)会默认增加该配置。
6. 已知限制
重启功能对使用标准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
Spring Boot 系列
https://blog.csdn.net/isea533/article/details/70495714
Spring DevTools 介绍的更多相关文章
- Spring boot 官网学习笔记 - Spring DevTools 介绍
想要使用devtools支持,只需使用dependencies将模块依赖关系添加到你的构建中 运行打包的应用程序时,开发人员工具会自动禁用.如果你通过 java -jar或者其他特殊的类加载器进行启动 ...
- Spring 框架介绍 [Spring 优点][Spring 应用领域][体系结构][目录结构][基础 jar 包]
您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 目录 ...
- Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍
1 Spring Batch介绍 企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务.这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行.这些典型作业包括 ...
- [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...
- Spring 的介绍和目标
1. Spring介绍 打开Spring 官网查看对 Spring 的介绍和目标 http://www.springsource.org/about We believe that: · J2EE s ...
- Spring的介绍与搭建
一.Spring的介绍 二.Spring的搭建 (1)导包 (2)创建一个对象 (3)书写配置注册对象到容器 (4)代码测试
- Spring Shell介绍
最近开发中在下遇到了spring-shell开发工具的项目,现在整理了相关文章,以供大家学习 本博客相关的文章均是在Spring Shell 1.2.0的基础上建立 Spring Shell介绍 ...
- 第1章—Spring之旅—Spring模块介绍
Spring模块介绍 Spring7大核心模块: 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.S ...
- Spring Security 介绍与Demo
一.Spring Security 介绍 Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块的默认技术选型.我们仅需引入spring-boot-s ...
随机推荐
- knowledge 开源知识管理系统
knowledge 是一个不错的知识管理系统,基于markdown 我们可以方便的进行知识的标签 以及展示 使用docker-compose 运行 环境准备 docker-compose 文件 ver ...
- Microsoft Dynamics CRM 2013 安装 报表服务出现“ SQL Server Reporting Services 帐户是本地用户且不受支持 ”错误的解决方法
安装好CRM 2013 之后,还需要安装报表服务,发现出现:SQL Server Reporting Services 帐户是本地用户且不受支持,具体如下图: 经过分析原来发现是需要用域用户,打开对应 ...
- 【appium】根据id定位元素
目前没有尝试成功,等成功后补充 id=Resource Id,可以通过UIAutomatorViewer获得.如果目标设备的API Level低于18则UIAutomatorViewer不能获得对应的 ...
- [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》
[ASP.NET MVC2 系列] [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序> ...
- php 加密 解密 方法
base64 Base64编码可用于在HTTP环境下传递较长的标识信息 base64_encode base64_decodeserialize 可以将 ...
- js 正则用空格分割字符串
var filename = "ASDFK*SADF+ALDLAS-LDKFADFa*seAc tion.java";var arr = filename.split(/\*|\- ...
- EINTR与ERESTARTSYS
驱动中如果down_interruptible之类的函数被信号中断,驱动可以返回-EINTR或-ERESTARTSYS. 区别在于: 若返回-EINTR,应用程序执行的系统调用会返回表示错误的值,且e ...
- 【Servlet和JSP-学习-1】基础知识
Servlet Session管理 Cookie 获取指定名称的Cookie 删除指定名称的Cookie JSP EL表达式 示例: 后台存入request中的属性值: JSP界面 JSTL 来自为知 ...
- windows平台安装配置Gitblit
1 安装配置jdk环境变量 2下载GitBlit,下载地址:http://www.gitblit.com或者http://gitblit.com 解压即可 3修改gitblit\data下defau ...
- 小峰servlet/jsp(3)登陆功能实现
一.User模型: User.java: package com.java1234.model; public class User { private int id; private String ...