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 でアクティブなプロファイルを切り替えます。
“—“でプロファイルを区切ることで、開発用とか本番用とかに定義を分けてを記述できます。

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にメイン・マニフェスト属性がありませんを解決する方法

まとめ

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

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

次はデータベース周りを検証しましょうかね。

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

SpringBootプログラミング入門

新品価格
¥3,024から



おつかれさまでした。

LINEで送る
Pocket

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

Javaの勉強が思うように進まないときは!

Javaの勉強が思うように進まないのであれば、プロに直接質問ができる プログラミングスクール を検討してみてはいかがでしょうか?プログラミングスクールに申し込めば、短期間で一定のスキルを身に着けることができます!

Javaコースあり!オンライン完結型 テックアカデミー TechAcademy [テックアカデミー]

どこかに通う必要なく、自宅でプログラミングやアプリ開発を学ぶことができるのが特徴のスクールです。未経験からプロになるまで最短4週間という、超短期集中型の学習ができます。年齢層は10代〜40代の男女が中心で、学引があり多くの学生が受講しているそうですよ。オンラインで受講ができるスクールですので、全国どこからでも学習ができますね。

更にさらに、パーソナルメンターにチャット質問できちゃうんです!!

これは素晴らしいことですよ!ハマったり困ったことが起こるのがプログラミングの世界。知っている誰かに聞けば数分で解決することが、自分だけだと何時間もかかったりしますから!いや、これホントですよ。

しかし、便利な世の中になりましたよねー。一昔前ではオンラインで学習できるなんて、思いもよりませんでしたから。講師もバリバリのエンジニアですので、現場で使えるスキルを教えてもらえます。なんとも素晴らしいスクールがあったものですね。学割を使えば社会人より半額以下で受講できますから、学生さんには超おすすめです。

これから Java プログラミングを勉強して、将来はプログラマーとして活躍したいと思っている方には、就職保証付きJavaエンジニアコース というのがおすすめです。就職先まで保証してくれるとなれば、もう安心して学習に専念できますね。夢への第一歩はここから始まるのかも。あ、将来はライバルですね^^

オンラインスクールですから営業エリアは全国です。
気になる方は一度チェックしてみてください。無料の動画説明会も常時開催していますよ。


Javaコースあり!未経験者にウケてる KENスクール パソコンスクール・パソコン教室 【KENスクール】個別指導のWeb-DTP・OA・IT PCスクール

理解度や学習ペースに合わせて、一人ひとりが納得して前進できる授業を提供してくれるのが特徴です。特に課題製作は現場さながらで、実務に即したものとなっていますので短期でのスキルアップが望めます。自宅学習のサポートも充実していて、授業内容をいつでもビデオで振り返ることができるのもうれしいですね。好きな時間に好きな場所で、無理なくスケジューリングできるので、仕事の忙しい方でも柔軟に学ぶことができますよ。

更にさらに、なんと 就職サポート をしてくれるというのですから驚きです!!

履歴書の書き方から面接指導、求人の紹介など、具体的な就職先まで提案してくれるんです!私も「もっと早く出会いたかったなぁー、こんなスクール」・・・って思っちゃいました^^

東京・神奈川・愛知・大阪を営業エリアとされています。
まずは気軽に 無料体験予約 に申し込んでみるのもアリですよ。


コメントを残す

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

コメント(必須)

Trackback URL