【问题标题】:Why properties binding (type conversion) changed in Spring 4.3.15:为什么属性绑定(类型转换)在 Spring 4.3.15 中发生了变化:
【发布时间】:2019-01-02 06:36:11
【问题描述】:

我有一个使用文件的 Spring Boot 应用程序。文件位置在配置属性文件中配置。 由于我升级了spring-boot版本,找不到该文件了。

升级

我从 Spring Boot 1.5.10.RELEASE 升级到 1.5.11.RELEASE。 由于该更改,我有一个新的 Spring 依赖项 (4.3.14 -> 4.3.15)。

设置

我有一个属性文件 (application.yml),其中包含我在配置 Pojo 上使用 @ConfigurationProperties 解析的属性。其中一个属性(称为file)属于java.io.File 类型。 在属性文件中,我使用相对路径(相对于类路径(/resources 目录))。

所以我有src/main/resources/sub/file.dat(应用程序需要的文件),在我的属性文件中写着..somewhere.file: "sub/file.dat"

file 属性的设置器中(在配置类中),参数的类型为org.springframework.core.io.Resource

public void setFile(Resource path) throws IOException {
    this.file = path.getFile();
}

映射/绑定

因此,Spring 负责属性(值)中的字符串值与Resource 参数之间的映射。我研究了一下,它使用自定义“编辑器”将字符串转换为资源。 但是,Resource 是一个接口,因此它将被映射(绑定)到的实际类尚不清楚。

发生了什么变化?

现在,在 Spring Boot 1.5.10.RELEASE 中,资源是 DefaultResourceLoader$ClassPathContextResource。 在 Spring Boot 1.5.11.RELEASE 中,资源变成了ServletContextResource

后者对在哪里可以找到我的资源有不同的想法。它认为他们在src/main/webapp/ 而不是src/main/resources。 所以,我实际上发现了是什么触发了无法找到我的文件的错误。

解决方案

我还发现将Resource 更改为ClassPathResource 完全解决了我的问题。

但是,我仍然不明白为什么在 spring-boot 的补丁版本中会发生这种情况(实际上是 spring 本身)。是bug吗??

我想我理解使用Resource 作为类型有点冒险,因为它有很多实现。

我在 spring 4.3.15 的更新日志中找不到任何内容 (https://jira.spring.io/secure/ReleaseNote.jspa?projectId=10000&version=16633)

另见:https://www.logicbig.com/tutorials/spring-framework/spring-boot/custom-configuration-properties-binding.html

【问题讨论】:

  • 你是如何运行你的 Spring Boot 应用程序的?作为部署的 WAR 还是独立的 JAR?但我猜这是 Spring Boot 中this change 的结果。这实际上使它按照 Spring 的资源加载规则应有的工作方式工作。 (对于WebApplicationContext,根路径是 Web 应用程序的根,而不是类路径的根)。因此,您实际上应该在属性文件中拥有的是classpath:sub/file.dat,而不是您现在拥有的。
  • 谢谢@M.Deinum。是的,我有一个战争。感谢类路径的想法。

标签: java spring spring-boot properties


【解决方案1】:

您的问题似乎是由此更改 here 和此问题 here 引起的。以前没有使用注册的 ProtocolResolvers,但是这次提交引起的更改修复了这个问题,并且它似乎因此影响了你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2012-01-28
    相关资源
    最近更新 更多