如何在 Spring Boot 的 application.yml 中定义默认空值
Posted
技术标签:
【中文标题】如何在 Spring Boot 的 application.yml 中定义默认空值【英文标题】:How to define default null value in application.yml in Spring Boot 【发布时间】: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
?
【参考方案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")
更多
所以,它是否有效取决于您如何使用它。在获得更多信息之前,我无法提供更多帮助。希望关注相关帖子可能会有所帮助。
Spring EL tutorial Spring Boot: customize environment【讨论】:
您好,谢谢,但没有多大帮助。你需要什么资料?我想在 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。 这在我删除单引号时起作用。谢谢以上是关于如何在 Spring Boot 的 application.yml 中定义默认空值的主要内容,如果未能解决你的问题,请参考以下文章