【问题标题】:How to define default null value in application.yml in Spring Boot如何在 Spring Boot 的 application.yml 中定义默认空值
【发布时间】:2016-03-06 14:28:33
【问题描述】:

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

-- application.yml --
test.foo: ${test.bar:#{null}}

但它不起作用。

如果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 中的所有值,但也没有用

谢谢

【问题讨论】:

  • 我们不会在配置文件中将 SpEL 表达式应用为explained in the documentation
  • 谢谢,如果我明白了,唯一的方法是使用PropertyPlaceholderConfigurer.setNullValue ?

标签: null spring-boot yaml default-value spring-el


【解决方案1】:

@值

从文档中我们可以看出:

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

这里其实是三个阶段:

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

用户案例

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

-- application.yml --
test.foo: ${test.bar:#{null}}

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

@Autowired
public A(@Value("test.foo") Object a) {}

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

env.getProperty("test.foo")

更多

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

【讨论】:

  • 您好,谢谢,但没有多大帮助。你需要什么资料?我想在 application.yml 中定义默认的 null 值(开箱即用 spring boot)。 "如果未定义 test.bar 的值,请将 test.foo 设置为 null(默认值)"
  • @khong07 我的意思是你如何推荐你的test.foo。如果您使用@Value 引用它,它可以工作。
  • 我用带有ConfigurationProperties 注释的类来引用它;)
【解决方案2】:

尝试使用:

-- application.yml --
test.foo: ${test.bar:}

【讨论】:

  • 刚试过这个,但是结果是空字符串“”。
【解决方案3】:

你需要这样设置:

test:
  foo: ${test.bar:'#{null}'}

【讨论】:

  • 请始终将您的答案放在上下文中,而不仅仅是粘贴代码。有关详细信息,请参阅here。
  • 这在我删除单引号时起作用。谢谢
猜你喜欢
  • 2021-07-20
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多