Spring Bootアプリケーションでは、application.propertiesの値を@Valueアノテーションを利用して取得できるが、定義ファイルから取得した値は、String型以外も利用できる。
今回は、定義ファイルから取得した数値を、Integer型・int型・String型の各値に格納してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
サンプルプログラムの構成
作成したサンプルプログラムの構成は以下の通り。
なお、上記の赤枠は、今回作成・変更したプログラムである。
application.propertiesの内容は以下の通りで、各プロパティ値を定義している。
1 2 3 4 5 6 7 8 9 | server.port = 8084 # プロパティファイルの各設定値 test.integer.prop1=10 test.integer.prop2= test.int.prop3=8 test.int.prop4= test.string.prop5=6 test.string.prop6= |
また、Spring Bootのメインクラスの内容は以下の通りで、Demoサービスクラスを呼び出している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication implements CommandLineRunner { /** * プロパティファイルから取得した値を表示するサービス */ @Autowired private DemoService demoService; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Override public void run(String... args) { // プロパティファイルから取得した値を表示する demoService.getProp(); } } |
さらに、Demoサービスクラスの内容は以下の通りで、プロパティファイルの値を、Integer型・int型・String型それぞれで読み込んでいる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package com.example.demo; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class DemoService { @Value("${test.integer.prop1}") private Integer prop1; @Value("${test.integer.prop2}") private Integer prop2; @Value("${test.int.prop3}") private int prop3; //int型の場合、空文字だとエラーになる //@Value("${test.int.prop4}") private int prop4; @Value("${test.string.prop5}") private String prop5; @Value("${test.string.prop6}") private String prop6; /** * プロパティの各値を取得し表示する */ public void getProp(){ System.out.println("prop1の値 : " + prop1); System.out.println("prop2の値 : " + prop2); System.out.println("prop2はNULLか? : " + (prop2 == null)); System.out.println(); System.out.println("prop3の値 : " + prop3); System.out.println("prop4の値 : " + prop4); System.out.println(); System.out.println("prop5の値 : " + prop5); System.out.println("prop6の値 : " + prop6); System.out.println("prop6は空文字か? : " + "".equals(prop6)); } } |
サンプルプログラムの実行結果
サンプルプログラムの実行結果は、以下の通り。
1) Demoサービスクラスのprop4の@Valueアノテーションを、以下の赤枠のようにコメントアウトした状態にする。
2) 1)の状態でDemoサービスクラスの「DemoApplication.java」を実行した結果は以下の通りで、prop1,prop3,prop5は取得した各値が、prop2にはNULL値が、prop6には空文字が、それぞれ設定されることが確認できる。
3) Demoサービスクラスのprop4の@Valueアノテー-ションを、以下の赤枠のようにコメントアウトを外した状態にする。
4) 3)の状態でDemoサービスクラスの「DemoApplication.java」を実行した結果は以下の通りで、UnsatisfiedDependencyExceptionがスローされることが確認できる。
要点まとめ
- Spring Bootアプリケーションで取得したプロパティファイルの値は、Integer型など、String型以外も利用できる。
- 定義ファイルから取得した値が空文字だった場合、Integer型の変数にはNULL値が、String型の変数には空文字が、それぞれ設定される。