Optional environment variables in Spring app

依然范特西╮ 提交于 2020-01-13 07:53:07

问题


In my Spring Boot app's application.properties I have this definition:

someProp=${SOME_ENV_VARIABLE}

But this is an optional value only set in certain environments, I use it like this

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

Surprisingly I get this error when the env. var doesn't exist
Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"
I was expecting Spring to just set a blank value if not found in any PropertySource.

How to make it optional?


回答1:


Provide a default value in the application.properties

someProp=${SOME_ENV_VARIABLE:#{null}}

When used like @Value("${someProp}), this will correctly evaluate to null. First, if SOME_ENV_VARIABLE is not found when application.properties is being processed, its value becomes the string literal "#{null}". Then, @Value evaluates someProp as a SpEL expression, which results in null. The actual value can be verified by looking at the property in the Environment bean.

This solution utilizes the default value syntax specified by the PlaceholderConfigurerSupport class

Default property values can be defined globally for each configurer instance via the properties property, or on a property-by-property basis using the default value separator which is ":" by default and customizable via setValueSeparator(String).

and Spring SpEL expression templating.

From Spring Boot docs on externalized configuration

Finally, while you can write a SpEL expression in @Value, such expressions are not processed from Application property files.



来源:https://stackoverflow.com/questions/47580247/optional-environment-variables-in-spring-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!