私の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
で見つからない場合は、空白の値を設定することを期待していました。
オプションにする方法は?
_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式を記述できますが、そのような式はアプリケーションプロパティファイルから処理されません。