Spring Boot のアプリケーション設定で配列を使う

spring-boot-tips

Spring Boot の設定ファイルで配列を定義したい事ってありませんか?
ありますよね?という事でその設定方法に関して記します。

はじめに

リオ五輪男子体操のおかげで睡眠不足な今日このごろ皆さまいかがおすごしですか。

Spring Boot で配列データを設定ファイルに外出ししたい要件があったので、application.yml に設定する方法に関して軽く調べていました。
本家のドキュメントの記載通りにコーディングしてサクッと実現できたのですが、日本語ドキュメントは見つける事ができなかったので記事化しておきます。

環境

環境は以下。
※application.yml を利用する想定です。application.properties での検証は行っていません。

Spring Boot 1.3.5.RELEASE

実装

要件

要件としては以下とします。

  • アプリケーションで利用する複数のコード値を設定ファイルにて外出し可能とする
  • 個々のコード値は文字列
  • Spring Boot からはリストとして取得できればOK
  • 可能な限り Spring Boot の標準的な仕組みを利用

軽くググってみたところ、spring.io に 24. Externalized Configuration というドキュメントに実現方法が記載されていました。
以下この記載に従った方法になります。

Configuration クラスの作成

配列値を扱う場合、Configurationクラスを作成する必要があります。

以下作成します。

application.yml に設定するプロパティ ( のキー ) は my-app.codes とします。

package jp.co.agilegroup.test.config;

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix="my-app")
public class MyApplicationConfigration {

    private List<String> codes = new ArrayList<String>();

    public List<String> getCodes() {
        return this.codes;
    }
}

記載するConfigurationクラスには @Configuration、及び、@ConfigurationProperties アノテーションを付与します。
@ConfigurationProperties アノテーションの prefix にはプロパティキーのプレフィックス値を記載しています。

※List codes とかも OK です。

application.yml

application.yml には以下のように設定を記載します。

my-app:
  codes:
    - 1
    - 2

※YAMLでは '-' を行頭に付ける事で配列を表現するらしい。'-' の後には半角スペースを入れて下さい。

利用側の記載

上記設定を利用するクラス側には以下のようにコードを記述すればOKです。

    ...
    @Autowired
    private MyApplicationConfigration config;
    ...
    List<String> codes = config.getCodes();

まとめ

という事で application.yml における配列値の設定方法でした。

上述の 24. Externalized Configuration には、配列値の設定方法以外にもランダム値の設定方法やマルチプロファイルでの設定方法等、こんな設定方法もあるのか! といった例が記載されています。
覗いてみると、新たな発見や解決策が見つかるかもしれません。