一尘不染

Spring应用程序中的可选环境变量

spring-boot

在我的Spring Boot应用程序中,application.properties我具有以下定义:

someProp=${SOME_ENV_VARIABLE}

但这是一个可选值,仅在某些环境中设置,我像这样使用它

@Value("${someProp:#{null}}")
private String someProp;

出人意料的是,当我遇到这个错误时,我得到了这个错误。var不存在,
Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"
我期望Spring如果找不到的话只是设置一个空值PropertySource

如何使其可选?


阅读 222

收藏
2020-05-30

共1个答案

一尘不染

在中提供默认值 application.properties

someProp=${SOME_ENV_VARIABLE:#{null}}

@Value("${someProp})这样使用时,这将正确计算为null。首先,如果在处理SOME_ENV_VARIABLE时未找到,application.properties则其值将成为字符串文字“#{null}”。然后,将其@Value评估someProp为SpEL表达式,结果为null。可以通过查看Environmentbean
中的属性来验证实际值。

此解决方案利用PlaceholderConfigurerSupport该类指定的默认值语法

可以通过properties属性为每个配置程序实例全局定义默认属性值,或者使用默认值分隔符(默认情况下为“:”并可以通过setValueSeparator(String)进行自定义)在逐个属性的基础上进行定义。

Spring SpEL表达式模板

来自Spring Boot docs关于外部化配置的信息

最后,尽管您可以在@Value中编写SpEL表达式,但不会从Application属性文件中处理此类表达式。

2020-05-30