web-dev-qa-db-ja.com

Springアプリのオプションの環境変数

私のSpring Bootアプリのapplication.propertiesには次の定義があります:

someProp=${SOME_ENV_VARIABLE}

しかし、これは特定の環境でのみ設定されるオプションの値であり、このように使用します

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

驚くべきことに、envのときにこのエラーが発生します。 varは存在しません
Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"
SpringがPropertySourceで見つからない場合は、空白の値を設定することを期待していました。

オプションにする方法は?

13
Maxime Laval

_application.properties_にデフォルト値を提供します

_someProp=${SOME_ENV_VARIABLE:#{null}}
_

@Value("${someProp})のように使用すると、これはnullに正しく評価されます。まず、_SOME_ENV_VARIABLE_が処理されているときに_application.properties_が見つからない場合、その値は文字列リテラル "#{null}"になります。次に、_@Value_はsomePropをSpEL式として評価し、結果としてnullになります。実際の値は、Environment Beanのプロパティを調べることで確認できます。

このソリューションは、 PlaceholderConfigurerSupport クラスで指定されたデフォルト値の構文を利用します

デフォルトのプロパティ値は、プロパティプロパティを介して各コンフィグレータインスタンスに対してグローバルに定義するか、デフォルト値セパレータを使用してプロパティごとに定義できます。デフォルト値はデフォルトで「:」で、setValueSeparator(String)でカスタマイズできます。

および Spring SpEL式テンプレート

外部化された構成 のSpring Bootドキュメントから

最後に、@ ValueでSpEL式を記述できますが、そのような式はアプリケーションプロパティファイルから処理されません。

17
Robert Farley