如何在Spring Boot中的application.yml中定义默认空值

kho*_*g07 10 null yaml default-value spring-el spring-boot

我正在尝试使用SpringBoot版本1.3.0.RELEASE在application.yml中将默认值定义为null值.目标是能够使用带ConfigurationProperties注释的类来引用它

-- application.yml --
test.foo: ${test.bar:#{null}}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

如果test.bar未定义值,则设置test.foo为null(默认值)

我的依赖项中已经有了spring-el.我不想用PropertyPlaceholderConfigurer.setNullValue

它似乎工作@Value但不在application.yml(参见http://farenda.com/spring/spring-inject-null-value/)

这是一个错误,或者yaml不是为此而设计的?我在http://yaml.org/type/null.html中尝试了所有值,但它也没有用

谢谢

Ton*_*ony 8

@价值

从文档中我们可以看到:

一个常见的用例是使用“#{systemProperties.myProp}”样式表达式分配默认字段值。

这里实际上分为三个阶段:

  • Spring获取注解字符串——AutowiredAnnotationBeanPostProcessor
  • Spring通过注解元数据获取属性值——Environmen
  • Spring解读属性值——ExpressionParser

用户案例

如果我们像您所描述的test.foo那样定义a :application.yml

-- application.yml --
test.foo: ${test.bar:#{null}}
Run Code Online (Sandbox Code Playgroud)

然后,我们通过代码在代码中引用它@Value,它的工作原理就像你说的那样。

@Autowired
public A(@Value("test.foo") Object a) {}
Run Code Online (Sandbox Code Playgroud)

但如果我们直接从 获取它environment,它将是纯字符串:

env.getProperty("test.foo")
Run Code Online (Sandbox Code Playgroud)

更多的

所以,它是否有效取决于你如何使用它。在提供更多信息之前我无法提供更多帮助。希望以下相关帖子可以有所帮助。