Springのプロパティ・プレースホルダでデフォルト値指定
Spring BootおよびSpring Web MVCのAPIリファレンスを見ていて知ったことのメモ。
例えばSpring Web MVCが提供するアノテーションの1つ、RequestMapping
のvalue
フィールド(Javadoc)。アノテーションが付与される型もしくはメソッド(コントローラ)が処理するリクエスト・パスのパターンを設定するものです。このフィールドにはパス変数("/foo/{bar}/baz"
)のほか、Springの各種コンフィギュレーションと同様に、プロパティファイルやシステムプロパティ、環境変数の値を埋め込むことができます。
その埋め込みの実例のなかでBasicErrorController
の以下のような指定方式があります(Javadoc):
@Controller @RequestMapping(value="${server.error.path:${error.path:/error}}") public class BasicErrorController extends AbstractErrorController { // ... }
statckoverflowのこちらのエントリーで知ったのですが、これは${property-name:default-value}
という構文なのだそうです。つまりコロン以降にデフォルト値を指定しているのです。上述の例ではそれがしかも入れ子の式になっています。
こうすることで一方ではプロパティ・ファイルなどに外部化された設定と個別に記述されたデフォルト値とで管理が煩雑になる面があるように思いますが、また一方では「そのプロパティが必要とされているまさにその場で」プロパティ名とデフォルト値を明記できることでロジックの意味の理解がしやすい面もあると思います。