ソース本体にハードコーディングしたくない設定値は外部ファイルに定義しておくのがプログラミングの基本です。例えば DB 接続情報や消費税率、パフォーマンス調整用の値などがありますね。
今回はフレームワーク Spring Boot を使用して、application.properties に独自のプロパティを登録し、それを使用するまでをメモしておきたいと思います。
こちらの記事に外部設定値の扱い方が詳しく書かれています。
Spring Bootの外部設定値の扱い方を理解する - Qiita
上記ページで紹介されている @Value を使用して、一番簡単な取得方法を説明していきたいと思います。
プロジェクトの作成
Spring Starter Project を使用して、プロジェクトを作成しますが、シンプルなプロジェクトにしたいので依存性には何も指定せず Finish ボタンをクリックします。プロジェクト名は「sample」としました。
これでシンプルなコマンドラインアプリケーションが作成されます。
プロパティの登録
デフォルトでは、application.properties には何も登録されていません。
ここに独自のプロパティを登録します。例では「org.yyama.hoge=hello! properties!」を登録しています。
org.yyama.hoge=hello! properties!
プロパティの使用
@Value を使用してクラスのフィールドに設定を読み込みます。
SampleApplication クラスを修正しました。
package org.yyama; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class SampleApplication { @Value("${org.yyama.hoge}") private String prop; public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(SampleApplication.class, args); SampleApplication sa = ctx.getBean(SampleApplication.class); sa.run(); } private void run() { System.out.println("prop : " + prop); } }
実行すると Spring 標準のログの後に、「hello! properties!」と表示されることが確認できました。
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.1.RELEASE) 2019-01-03 13:56:59.962 INFO 8892 --- [ main] org.yyama.SampleApplication : Starting SampleApplication on yyama-PC with PID 8892 (C:\workspace\sample\target\classes started by yyama in C:\workspace\sample) 2019-01-03 13:56:59.966 INFO 8892 --- [ main] org.yyama.SampleApplication : No active profile set, falling back to default profiles: default 2019-01-03 13:57:00.586 INFO 8892 --- [ main] org.yyama.SampleApplication : Started SampleApplication in 1.005 seconds (JVM running for 1.928) prop : hello! properties!
コンストラクタ処理内ではこのプロパティはまだ初期化されていません(参照すると null が返ってきます)ので注意してください。
application.properties にワーニングが出ているんですけど
プログラムは問題なく動くのですが、プロパティファイルにワーニングが出ていることに気づくと思います。
「org.yyama.hoge」の箇所に「'org.yyama.hoge' is an unknown property.」というワーニングが出ています。「そんなプロパティ知らないよ」ということですね。
ワーニングメッセージの後に解決案( quickfixes )が 3 つ提示されており、一番上のメタデータ作成を選んでみます。
メタデータ作成ダイアログが表示されますので、メタデータをおきたいリソースファイルを選択します。ここでは「/sample/src/main/resources」を選択して OK を押しました。
META-INF フォルダおよび additional-spring-configuration-metadata.json ファイルが自動で作成され、ワーニングが消えました。
作られた json ファイルを見ると org.yyama.hoge プロパティのメタ情報が登録されています。
{"properties": [{ "name": "org.yyama.hoge", "type": "java.lang.String", "description": "A description for 'org.yyama.hoge'" }]}
この json ファイルがあると、application.properties の編集中に ctrl + space で独自プロパティのコード補完も効くようになります。
まとめ
application.properties ファイルに独自のプロパティ定義とその利用方法、およびそのプロパティのメタ情報登録までを行いました。
他のブログでもプロパティファイルの利用方法は紹介されています。いろいろな方法があるようですが、この記事では自分が知る中で、一番簡単な方法を紹介しました。
次回はシステム環境変数の取得方法について紹介したいと思います。
Spring Boot 環境変数の取得 - 山崎屋の技術メモ
それでは!

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者: 株式会社NTTデータ
- 出版社/メーカー: 翔泳社
- 発売日: 2016/07/20
- メディア: Kindle版
- この商品を含むブログ (1件) を見る

- 作者: 廣末丈士,宮林岳洋,高安厚思
- 出版社/メーカー: ソシム
- 発売日: 2018/11/30
- メディア: 単行本
- この商品を含むブログを見る

- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2018/11/12
- メディア: Kindle版
- この商品を含むブログを見る