eclipse springboot无法访问templates_Spring Boot中文参考指南(2.1.6)20、开发者工具(1)...

本文介绍了Spring Boot的开发者工具(devtools)模块,该模块提供了一系列开发时特性,如自动重启、缓存禁用等。当类路径中的文件发生变化时,应用会自动重启,加快开发反馈循环。此外,devtools还修改了默认属性以禁用缓存,增强了web请求的日志记录,并允许自定义重启类加载器。自动重启功能依赖于类路径资源的变化,且可与其他热部署工具如JRebel配合使用。
摘要由CSDN通过智能技术生成

上一篇[19、运行你的应用]

下一篇[20/21/22、开发者工具(2)]

b5290e3936d9a2dc2afbca0c731d62e4.png
英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/using-boot-devtools.html#using-boot-devtoolsGitHub:https://github.com/jijicai/Spring/tree/master/spring-boot

20、开发者工具

Spring Boot 包括一组额外的工具,这些工具可以使应用程序开发体验更加愉快。spring-boot-devtools 模块可以包含在任何在任何项目中,以提供额外的开发时特性。要包含 devtools 支持,请将模块依赖项添加到你的构建中,如下面的 Maven 和 Gradle 清单所示:

ff3947cb3f08c65c68522d0ec044319d.png

Maven

org.springframework.boot spring-boot-devtools true

Gradle

91023c4da752eb0d3cdf682defefcd07.png
configurations {developmentOnlyruntimeClasspath { extendsFrom developmentOnly}}dependencies {developmentOnly("org.springframework.boot:spring-boot-devtools")}

注释:在运行完全打包的应用程序时,开发者工具将自动禁用。如果你的应用程序是从 java -jar 启动的,或者是从一个特殊的类加载器启动的,那么它被认为是一个“生产环境的应用”。如果这不适用于你(例如,如果你在容器中运行应用),请考虑排除 devtools 或设置 -Dspring.devtools.restart.enabled=false 系统属性。

提示:在 Maven 中将依赖项标记为可选,或者在 Gradle 中使用自定义的“developmentOnly”配置(如上图所示),这是一种最佳实践,可以防止 devtools 过度地应用于你项目的其他模块。

提示:默认情况下,重新打包的存档文件不包含 devtools。如果要使用某个远程 devtools 功能,则需要禁用 excludeDevtools 构建属性才能包含它。Maven 和 Gradle 插件都支持这个属性。

20.1、属性默认值

Spring Boot 支持的几个库使用缓存来提高性能。例如,模板引擎缓存已编译的模板,以避免重复地解析模板文件。另外,Spring MVC 可以在服务静态资源时向响应添加 HTTP 缓存头。

虽然缓存在生产环境中非常有用,但在开发过程中可能适得其反,使你无法看到刚刚在应用程序中所做的更改。因此,默认情况下,spring-boot-devtools 会禁用缓存选项。

缓存选项通常由 application.properties 文件中的设置配置。例如,Thymeleaf 提供 spring.thymeleaf.cache 属性。spring-boot-devtools 模块不需要手动设置这些属性,而是自动应用合理的开发时配置。

由于在开发 Spring MVC 和 Spring WebFlux 应用程序时需要更多关于 web 请求的信息,开发者工具将为 web 日志组启用调试(DEBUG)日志记录。这将提供有关请求、哪个处理程序处理它、响应结果等的信息。如果希望记录所有请求详细信息(包括潜在的敏感信息),可以打开 spring.http.log-request-details 配置属性。

注释:如果不希望应用属性默认值,则可以在 application.properties 文件中设置 spring.devtools.add-properties 为 false。

提示:关于devtools 应用的属性的完整列表,请参见 DevToolsPropertyDefaultsPostProcessor。(https://github.com/spring-projects/spring-boot/tree/v2.1.6.RELEASE/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsPropertyDefaultsPostProcessor.java)

20.2、自动重启

每当类路径中的文件有变化时,应用程序会使用 spring-boot-devtools 自动地重启。当在 IDE 中工作时,这可能是一个有用的特性,因为它为代码更改提供了非常快速的反馈循环。默认情况下,类路径所指的文件夹中的任何文件都会被监控其变化。请注意,某些资源,例如:静态资产和视图模板,不需要重启应用程序。

触发重启

由于 DevTools 监视类路径资源,触发重启的唯一方法是更新类路径。导致类路径更新的方式取决于你使用的 IDE。在 Eclipse 中,保存修改过的文件会导致类路径被更新并触发重启。在 IntelliJ IDEA 中,构建项目(构建->构建项目)具有同样的效果。

注释:只要启用了 forking,你还可以使用支持的构建插件(Maven 和 Gradle)启动应用程序,因为 DevTools 需要一个独立的应用程序类加载器才能正常运行。默认情况下,Gradle 和 Maven 在类路径上检测到 DevTools 时会这样做。

提示:当与 LiveReload 一起使用时,自动重启效果非常好。有关详细信息,请参阅 LiveReload 部分。如果使用 JRebel,则禁用自动重启,以便动态类重新加载。其他 devtools 特性(如 LiveReload 和属性覆盖)仍然可以使用。

注释:DevTools 依赖于应用程序上下文的 shutdown 钩子在重启期间关闭它。如果你禁用了 shutdown 钩子,则无法正常工作。

注释:当决定类路径上的条目在发生更改时是否应该触发重启时,DevTools 会自动忽略名为 spring-boot、spring-boot-devtools、spring-boot-autoconfigure、spring-boot-actuator 和 spring-boot-starter 的项目。

注释:DevTools 需要自定义 ApplicationContext 使用的 ResourceLoader。如果你的应用程序已经提供了一个,它将被包装。不支持直接重写 ApplicationContext 上的 getResource 方法。

重启和重新加载

Spring Boot 提供的重启技术通过使用两个类加载器来工作。不改变的类(例如,来自第三方 jar 的类)被加载到基类加载器中。正在积极开发的类将加载到 restart 类加载器中。当应用重启时,restart 类加载器将被丢弃,并创建一个新的类加载器。这种方法意味着应用程序重启通常比“冷启动”快得多,因为基本类加载器已经可用并已填充。

如果发现重启对应用来说不够快,或者遇到类加载问题,则可以考虑重新加载技术,例如来自 ZeroTurnaround 的 JRebel。这些工作是通过在加载类时重写它们,使它们更易于重新加载。

20.2.1、记录条件评估中的变化

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

要禁用报告的日志记录,请设置以下属性:

98e6bbc1fa15ab0cb9bf4f3aae6c4491.png
spring.devtools.restart.log-condition-evaluation-delta=false

20.2.2、排除资源

某些资源在更改时不一定需要触发重启。例如,可以就地编辑 Thymeleaf 模板。默认情况下,更改在 /META-INF/maven, /META-INF/resources, /resources, /static, /public 或 /templates 中的资源不会触发重启,但会触发实时重新加载。如果你想自定义这些排除项,则你可以使用 spring.devtools.restart.exclude 属性。例如,要只排除 /static 和 /public,你可以设置以下属性:

e2c9d7a7a7257e761bb192323fb7650f.png
spring.devtools.restart.exclude=static/**,public/**

提示:如果想保持这些默认值并添加其他排除项,则使用 spring.devtools.restart.additional-exclude 属性代替。

20.2.3、查看其它路径

当你更改不在类路径上的文件时,你可能希望重启或重新加载应用程序。为此,请使用 spring.devtools.restart.additional-paths 属性配置其他路径,以监视更改。你可以使用前面描述的 spring.devtools.restart.exclude 属性来控制附加路径下的更改是触发完全重启还是实时重新加载。

20.2.4、禁用重新启动

如果不想使用重启的特性,则可以通过使用 spring.devtools.restart.enabled 属性来禁用它。在大多数情况下,可以在 application.properties 文件中设置这个属性(这样做仍会初始化 restart 类加载器,但它不会监视文件更改)。

如果需要完全禁用 restart 支持(例如,因为它不能和特定的库一起工作),则需要在调用 SpringApplication.run(...) 之前将 spring.devtools.restart.enabled 系统属性设置为 false,如下面示例所示:

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

20.2.5、使用触发器文件

如果使用的 IDE 可以持续编译更改的文件,则可能希望仅在特定时间触发重启。为此,你可以使用“触发文件”,这个是一个特殊文件,当你希望实际触发重启检查时,必须对其进行修改。仅当 Devtools 检查到必须执行某些操作时,更改文件才会触发检查并重启。触发器文件可以手动更新,也可以使用 IDE 插件更新。

要使用触发文件,请将 spring.devtools.restart.trigger-file 属性设置为该触发文件的路径。

提示:你可能希望将 spring.devtools.restart.trigger-file 属性作为全局设置,以便所有项目的行为都相同。(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/using-boot-devtools.html#using-boot-devtools-globalsettings)

20.2.6、自定义 restart 类加载器

如前面的重启和重新加载部分所述,重启功能是通过使用两个类加载器实现的。对于大多数应用,这种方法工作得很好。但是,它有时会导致类加载问题。

默认情况下,IDE 中任何打开的项目都用“restart”类加载器加载,而任何常规的 .jar 文件都用“base”类加载器加载。如果在多模块项目上工作,并且不是每个模块都被导入到 IDE 中,则可能需要定制一些东西。为此,可以创建文件 META-INF/spring-devtools.properties。

spring-devtools.properties 文件可以包含前缀为 restart.exclude 和 restart.include 的属性。include 的元素应该放入到 restart 类加载器,exclude 的元素应当放入到 base 类加载器。该属性值是正则匹配,可以应用于类路径,如下面示例所示:

d12065d1c3b2e3474eeaf1327884a13d.png
restart.exclude.companycommonlibs=/mycorp-common-[wd-.]+.jarrestart.include.projectcommon=/mycorp-myproj-[wd-.]+.jar

注释:所有属性的键(key)必须是唯一的。只要属性以”restart.include.“或”restart.exclude.“开头,就会被考虑的。

提示:加载类路径中的所有 META-INF/spring-devtools.properties。你可以在项目内部或项目使用的库中打包文件。

20.2.7、已知限制

对于使用标准 ObjectInputStream 反序列化的对象,重启功能不能很好地工作。如果需要反序列化数据,则可能需要结合使用 Spring 的 ConfigurableObjectInputStream 和 Thread.currentThread().getContextClassLoader()。

不幸的是,一些第三方库在反序列化时没有考虑上下文类加载器。如果你发现这样的问题,你需要请求于原始作者修复。

上一篇[19、运行你的应用]

下一篇[20/21/22、开发者工具(2)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值