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

时间:2015-12-02 11:06:22

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

我正在尝试使用SpringBoot版本1.3.0.RELEASE在application.yml中将默认值定义为null值。目标是能够使用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中的所有值,但它不起作用

由于

3 个答案:

答案 0 :(得分:2)

@Value

从文件中我们可以看到:

  

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

这实际上是三个阶段:

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

用户案例

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

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

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

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

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

env.getProperty("test.foo")

更多

因此,它是否有效取决于你是如何使用它的。在获得更多信息之前,我无法提供更多帮助。希望以下相关文章可能有所帮助。

答案 1 :(得分:0)

尝试使用:

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

答案 2 :(得分:0)

您需要这样设置:

list1<-c(1:4)
df$col<-1:nrow(df)
df$remainder<-df$col%%4
df$col<-NULL

dcast(df,ind~remainder, value.var = "shr" )

>   ind     0     1    2     3
1 ind1  0.68 -0.23 0.00  0.12
2 ind2 -0.23 -0.54 0.80  0.14
3 ind3  0.31  0.48 0.94 -0.01
4 ind4  0.05  0.18 0.11  0.98

dcast(df,remainder~ind, value.var = "shr" )

>  remainder  ind1  ind2  ind3 ind4
1         0  0.68 -0.23  0.31 0.05
2         1 -0.23 -0.54  0.48 0.18
3         2  0.00  0.80  0.94 0.11
4         3  0.12  0.14 -0.01 0.98