Spring Bootで環境変数を使ってリストやマップを渡す方法

Spring Bootアプリケーションでは、環境変数を使って設定値を渡すことがよく行われます。

しかし、リストやマップのような複雑なデータ構造を環境変数で渡す場合、注意が必要。
今回は、Spring Bootでリストやマップ構造のプロパティを環境変数として渡す方法を自分用に書き溜めておきます。

広告

先に環境変数

application.yml

例えば、application.ymlが下記のような感じ

この設定ファイルでは、dataListというリストがあり、リストの各要素にtag, group-id, endpointというプロパティが含まれています。

application.yml を環境変数へ変換

Spring Bootでは、環境変数を使用してapplication.ymlのプロパティを設定できますが、リストやマップ構造のプロパティを直接環境変数として渡すことはできません。

代わりに、それらの構造をフラットな形式に変換して設定する必要がある。

さっきの例では、次のように環境変数名を設定できます。

注意点として、リスト内の要素のインデックスを使用しないといけないので、「0」とか「1」とか指定している。

これらの環境変数を設定することで、application.ymlのプロパティが上書きされます。

考慮しないといけないこととして、

リストやマップのような複雑なデータ構造の場合、環境変数よりも、外部の設定ファイルを使用して設定を渡す方がシンプルで柔軟性がある。

環境変数でリストやマップを渡す場合は、インデックスが0から始まり、連続した整数値である必要がある。

じゃあね~~。