我在Spring bean中有以下内容:
@Value("${myValue}")
private String value;
正确注入值。但是,变量需要是可选的,它作为命令行参数传入(然后使用SimpleCommandLinePropertySource将其添加到Spring上下文中),并且这个参数并不总是存在。
我尝试了以下两种方法,以提供默认值:
@Value("${myValue:}")
@Value("${myValue:DEFAULT}")
但在每种情况下,冒号后面的默认参数被注入,即使有一个实际值-这似乎覆盖了Spring应该注入的内容。
指定**@Value**不需要的正确方法是什么?
谢谢
4条答案
按热度按时间nbewdwxp1#
指定@Value不是必需的正确方法是什么?
假设“不需要”是指
null
。..您已经正确地注意到,您可以在
:
字符的右侧提供默认值。你的例子是@Value("${myValue:DEFAULT}")
。不限于将普通字符串作为默认值。您可以使用SPEL表达式,返回
null
的一个简单的SPEL表达式是:o0lyfsai2#
如果你使用的是Java 8,你可以利用它的
java.util.Optional
类。你只需要按照下面的方式声明变量:然后,你可以用一种更好的方式来检查这个值是否被定义:
希望有帮助!
inn6fuwd3#
如果你想让配置属性是可选的,只需要像这样传递一个空字符串:
v1uwarro4#
我猜你是在使用多个上下文:property-placeholder/ declarations?
如果是这样的话,这是一个自2012年以来已知的问题,但没有解决,显然是由于缺乏兴趣和没有干净的解决方法。请参阅https://github.com/spring-projects/spring-framework/issues/14623以了解讨论和一些解决方法。http://www.michelschudel.nl/wp/2017/01/25/beware-of-multiple-spring-propertyplaceholderconfigurers-and-default-values/以一种可以理解的方式解释了它