我正在尝试使用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中的所有值,但它不起作用
由于
答案 0 :(得分:2)
从文件中我们可以看到:
一个常见的用例是使用“#{systemProperties.myProp}”样式表达式分配默认字段值。
这实际上是三个阶段:
AutowiredAnnotationBeanPostProcessor
Environmen
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