繁体   English   中英

Spring @Value 注解值被默认值覆盖

[英]Spring @Value annotation value overwritten by default value

我们正在实现 Spring 引导应用程序(v2.2.5),并且有一个使用 @Value 注释的配置,如下所示( org.springframework.beans.factory.annotation.Value )。

@Value("${something.about:abcd}")
private String somethingAbout;

application.yml文件中,我们有这样的属性。

something:
  about: real_value

在这个 @Value 注释中,我打算按如下方式工作:

  1. 使用 application.yml 文件中定义的属性值。
  2. 否则,使用默认值(abcd)

但是,它不会读取现有属性值并将其设置为变量。 变量设置为“abcd”。

@Value("${something.about}") // Works fine

@Value("${something.about:abcd}") // It uses 'abcd' even the property exist

有什么我错过的吗?

根据对该问题的有用评论,我将在这里总结原因和解决方案。

原因

  • 由于多个PropertyPlaceholderConfigurer行为,会发生默认值覆盖 @Value 属性的问题。

  • 我们有一个旧版本的 Springfox 用于使用 Swagger 并且有一个PropertyPlaceholderConfigurer的 bean 声明。 它在 spring-context 中导致原始PropertySourcePlaceholderConfigurer出现多种行为。

  • 最终,由于 Springfox 旧版本中PropertyPlaceholderConfigurer bean 的多重行为, application.yml文件中写入的正确属性值被覆盖了默认值。

  • 您可以从这里查看详细信息: https://github.com/springfox/springfox/issues/1621

解决方案

  • Springfox 的已知问题自 2.7.0 版本以来已得到解决。

  • 我已通过将 Springfox 版本更新为 3.0.0以删除重复的PropertyPlaceholderConfigurer声明来解决该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM