[英]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 注释中,我打算按如下方式工作:
但是,它不会读取现有属性值并将其设置为变量。 变量设置为“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.