Spring Bootアプリケーションでは、application.propertiesの値を@Valueアノテーションを利用して取得できるが、定義ファイルから取得した値は、String型以外も利用できる。
今回は、定義ファイルから取得した数値を、Integer型・int型・String型の各値に格納してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
サンプルプログラムの構成
作成したサンプルプログラムの構成は以下の通り。

なお、上記の赤枠は、今回作成・変更したプログラムである。
application.propertiesの内容は以下の通りで、各プロパティ値を定義している。
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サービスクラスを呼び出している。
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型それぞれで読み込んでいる。
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型の変数には空文字が、それぞれ設定される。



