spring 如何将@Value定义为可选

idfiyjo8  于 2023-04-28  发布在  Spring
关注(0)|答案(4)|浏览(194)

我在Spring bean中有以下内容:

@Value("${myValue}")
private String value;

正确注入值。但是,变量需要是可选的,它作为命令行参数传入(然后使用SimpleCommandLinePropertySource将其添加到Spring上下文中),并且这个参数并不总是存在。
我尝试了以下两种方法,以提供默认值:

@Value("${myValue:}")
@Value("${myValue:DEFAULT}")

但在每种情况下,冒号后面的默认参数被注入,即使有一个实际值-这似乎覆盖了Spring应该注入的内容。
指定**@Value**不需要的正确方法是什么?
谢谢

nbewdwxp

nbewdwxp1#

指定@Value不是必需的正确方法是什么?
假设“不需要”是指null。..
您已经正确地注意到,您可以在:字符的右侧提供默认值。你的例子是@Value("${myValue:DEFAULT}")
不限于将普通字符串作为默认值。您可以使用SPEL表达式,返回null的一个简单的SPEL表达式是:

@Value("${myValue:#{null}}")
o0lyfsai

o0lyfsai2#

如果你使用的是Java 8,你可以利用它的java.util.Optional类。你只需要按照下面的方式声明变量:

@Value("${myValue:#{null}}")
private Optional<String> value;

然后,你可以用一种更好的方式来检查这个值是否被定义:

if (value.isPresent()) {
    // do something cool
}

希望有帮助!

inn6fuwd

inn6fuwd3#

如果你想让配置属性是可选的,只需要像这样传递一个空字符串:

@Value("${app.optional.value:}")
v1uwarro

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/以一种可以理解的方式解释了它

相关问题