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

时间:2017-11-30 18:26:21

标签: spring spring-boot environment-variables

在我的Spring Boot应用程序中expose我有这个定义:

application.properties

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

someProp=${SOME_ENV_VARIABLE}

令人惊讶的是,我在env时遇到此错误。 var不存在
@Value("${someProp:#{null}}") private String someProp;
如果在任何Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"中找不到,我希望Spring只设置一个空白值。

如何使其成为可选项?

1 个答案:

答案 0 :(得分:12)

application.properties

中提供默认值
someProp=${SOME_ENV_VARIABLE:#{null}}

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

此解决方案使用PlaceholderConfigurerSupport

指定的默认值语法
  

可以为每个配置器全局定义默认属性值   实例通过属性属性,或逐个属性   使用默认值分隔符的基础,默认值为“:”   可通过setValueSeparator(String)自定义。

Spring SpEL expression templating

来自externalized configuration

上的Spring Boot文档
  

最后,您可以在@Value中编写SpEL表达式,例如   表达式不是从Application属性文件处理的。