【问题标题】:Spring boot @Value cannot work when default value is set to empty string当默认值设置为空字符串时,Spring boot @Value 无法工作
【发布时间】:2022-11-05 03:24:59
【问题描述】:

我正在使用 @Value 并将空字符串设置为默认值。 例如

@Value("${rootPath:}")
private String rootPath;

它工作了很长时间(Spring Boot 2.1.x 和 2.2.x)。

这次我尝试将我的 Spring Boot 版本升级到 2.5.x。 事实证明,我无法正确获取属性值。

我在 application.yml 中定义了我的属性,但是在设置默认值时我无法获取它。

我检查了 Spring Boot 发行说明,@Value 没有任何改变。

我在其他项目代码(具有相同的 Spring Boot 版本)上尝试了此代码,它运行良好。 但是我很难找出这两个项目有什么不同。我没有改变这个功能。

【问题讨论】:

  • 仅第二个屏幕截图证明,${a1.plugins.fileresource.path.tmp} 已设置。 (不是不​​正确的默认行为)

标签: spring-boot spring-bean


【解决方案1】:

事实证明,这是在我导入的一个 jar 中定义的关于 URulePropertyPlaceholder 的配置(这是我同事创建的插件)。

@Component
public class URulePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
    public URulePropertyPlaceholderConfigurer() {
        setIgnoreUnresolvablePlaceholders(true);
        setOrder(100);
    }
}

这将导致所有占位符读取错误。 我改变了它,一切都很好。

@Component
public class URulePropertyPlaceholderConfigurer extends PropertySourcesPlaceholderConfigurer {
    public URulePropertyPlaceholderConfigurer() {
        setIgnoreUnresolvablePlaceholders(true);
        setOrder(100);
    }
}

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 2020-07-17
    • 2020-10-06
    • 2011-04-09
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多