【Java】Spring:application.yamlに設定した値を取得する

■概要

作成する機能の概要は以下の通り。

  • application.yamlに値を設定する
  • 取得した値をREST機能で返却

また、JAVAとSpringのバージョンは以下の通り。

項目バージョン
JAVA17
Spring Boot3.3.3

■設定値と出力値

application.yamlに設定する項目と、REST機能で出力する想定の値を以下に示す。

・application.yaml

app:
  version: "1.0.0"
  data:
    element1: "hoge1"
    element2: "hoge2"
    element3:
      element3-1: "hoge3-1"
      element3-2: "hoge3-2"

・出力値(「http://localhost:8080/rest/get/yamldata」アクセス時)

{"element1":"hoge1","element2":"hoge2","element3-1":"hoge3-1","element3-2":"hoge3-2","version":"1.0.0"}

■モジュールの階層構造

作成するモジュールの階層構造を示す。

■クラス図

今回作成するモジュールのクラス図を以下に示す。

■サンプルコード

・GetYamlController.java

package com.example.demo.get.data.controller;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.get.data.service.RestService;

@RestController
public class GetYamlController {

	@Autowired
	RestService restService;

	// yamlデータを取得()
	@GetMapping("/rest/get/yamldata")
	public Map<String, String> getYamlDatas() {
		return restService.getDataFromYamList();
	}

}

・RestService.java

package com.example.demo.get.data.service;

import java.util.Map;

public interface RestService {

	// yamlから取得
	public Map<String, String> getDataFromYamList();
}

・RestServiceImpl.java

package com.example.demo.get.data.service;

import java.util.Map;

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

import com.example.demo.get.data.util.GetDataFromYaml;

@Service("RestServiceImpl")
public class RestServiceImpl implements RestService {

	@Autowired
	GetDataFromYaml getDataFromYaml;

	@Override
	public Map<String, String> getDataFromYamList() {

		return getDataFromYaml.getDatas();
	}
}

・GetDataFromYaml.java

package com.example.demo.get.data.util;

import java.util.Map;
import java.util.TreeMap;

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

@Component
public class GetDataFromYaml {

	/* application.yamlの値を取得 */
	@Value("${app.version}")
	private String appVersion;

	@Value("${app.data.element1}")
	private String element1;

	@Value("${app.data.element2}")
	private String element2;

	@Value("${app.data.element3.element3-1}")
	private String element3_1;

	@Value("${app.data.element3.element3-2}")
	private String element3_2;

	/*
	 * yamlのデータ取得処理
	 * 
	 * @reurn yamlのデータ配列
	 */
	public Map<String, String> getDatas() {

		// 返却用リスト
		final Map<String, String> datas = new TreeMap<String, String>();

		// yamlの値を追加
		datas.put("version", appVersion);
		datas.put("element1", element1);
		datas.put("element2", element2);
		datas.put("element3-1", element3_1);
		datas.put("element3-2", element3_2);

		return datas;

	}
}

■実行結果

タイトルとURLをコピーしました