Spring Bootで設定ファイル(yaml)を読み込む方法 ホームページ制作 | 墨田区

Spring Bootで設定ファイル(yaml)を読み込む方法

LINEで送る
Pocket

Spring Bootでyaml形式の設定ファイルを読み込む方法のご紹介です。
Spring Bootで設定ファイル(yaml)を読み込む方法

プロジェクトに必要な設定を書いた外部定義ファイルを用意し、それを読み込んで使うって一般的なことです。ログの出力先とか、データベースの接続先とか、必要なものっていっぱいあります。

コンテキストルートの config に application.properties を作成しても同じですが、yaml の書き方が好きなので、今回は yaml での設定方法と、読み込み方法を掲載します。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


環境

Spring Boot 1.4.1
Thymeleaf 3.0.2
Windows7
Java8
Eclipse 4.6 Neon

こちらのページを参考にサンプルアプリを作ってください。既に何がしかのアプリがある場合は、読み飛ばして結構です。
Spring Bootを使ってWebアプリを作る方法

application.ymlを作成

src/main/resources の中に config フォルダを作って application.yml を作ります。
サンプルとして下記を記述します。
# spring.profiles.activeにアクティブなプロファイルを指定する
spring:
  profiles:
    active: dev

# "---"でプロファイルを区切る
# spring.profilesにプロファイル名を書く
---
spring:
  profiles: dev
users:
 id: saka-en-dev
 name: サカエン開発
---
spring:
  profiles: production
users:
 id: saka-en-pro
 name: サカエン本番

spring.profiles.active でアクティブなプロファイルを切り替えます。
“—“でプロファイルを区切ることで、開発用とか本番用とかに定義を分けてを記述できます。

もちろん、ファイル自体を分けて管理することもできます。
Spring Boot application.ymlは環境によって分ける

上図のように、共通となる設定は application.yml に記述し、開発・テスト・本番の環境など、application 以降を “-” で区切って、spring.profiles に設定した名前を付けましょう。そして application.yml に記述した spring.profiles.active でアクティブなプロファイルを切り替えます。

application.ymlを読み込む

application.yml から定義値を読み込みます。まずは読み込んだ値を格納するクラスを作りましょう。作ったクラスには「@ConfigurationProperties」アノテーションを付与します。

Lombok を使用することで getter / setter を省略しています。
Lombokを使ってJavaBeansコードをシンプルに書く方法

package springbootapp;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import lombok.Data;

@Data
@Component
@ConfigurationProperties(prefix="users")
public class UserConfig {
  private String id;
  private String name;
}

次に、定義ファイルの値を返却するクラスを作成します。
package springbootapp;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import lombok.Getter;

@Getter
@Component
public class ConfigReader {
  @Autowired
  private UserConfig logConf;
}

最後に、エントリーポイントのクラスに記述します。「@Autowired」アノテーションを付与し、先ほど作成したコンポーネントをインジェクションします。
@Autowired
private UserConfig userConf;
@Override
public void run(String...args) {
  System.out.println(userConf.getId());
  System.out.println(userConf.getName());
}

今回はフィルターの構成クラスに記述したので、こんな感じになりました。
package springbootapp;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

  @Autowired
  private UserConfig userConf;

  @Bean
  public FilterRegistrationBean filter1() {
    System.out.println(userConf.getId());
    System.out.println(userConf.getName());
    FilterRegistrationBean bean = new FilterRegistrationBean();
    bean.setFilter(new LoggingFilter1());
    bean.setOrder(2);
    return bean;
  }

  @Bean
  public FilterRegistrationBean filter2() {
    FilterRegistrationBean bean = new FilterRegistrationBean();
    bean.setFilter(new LoggingFilter2());
    bean.setOrder(1);
    return bean;
  }
}

早速、実行してみましょう。
“spring.profiles.active=dev” の場合
2016-11-21 17:08:27.508  INFO 7728 --- [           main] springbootapp.App                        : The following profiles are active: dev
・・・中略・・・
saka-en-dev
サカエン開発

“spring.profiles.active=production” の場合
2016-11-21 17:09:57.522  INFO 10040 --- [           main] springbootapp.App                        : The following profiles are active: production
・・・中略・・・
saka-en-pro
サカエン本番

おおお、きちんと切り替わりましたねー^^

ちなみにコマンドで起動する場合は、以下のように jar の起動オプションに「–spring.profiles.active=production」とすれば本番環境で起動できます。
java -jar (アプリ名).jar --spring.profiles.active=production

jar 起動でエラーが出た方はこちらを参考にしてください。
Spring Boot jarにメイン・マニフェスト属性がありませんを解決する方法

まとめ

開発・本番で環境が違うことで、様々なパラメータを外出して管理するというのは、どのプロジェクトにも共通のことだと思います。これが手軽に実現できるってのは、生産性向上+メンテ性向上にもつながりますね。

皆さんも試してみてください。

次はデータベース周りを検証しましょうかね。
Spring BootでORACLEデータベースに接続する方法

おすすめ書籍 – 私はこの書籍1冊で Spring Boot を習得できました^^

SpringBootプログラミング入門

新品価格
¥3,024から



おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

コメントを残す

コメント(必須)

お名前 (必須)
メールアドレス
(アドレスは公開されません)

Trackback URL