https://end0tknr.hateblo.jp/entry/20180114/1515907344
以前の上記エントリーの再編集でポイントは以下の通り。
- aplication.properties の代わりに application.yml があると、Spring Boot が自動認識
- snake caseで記載しても、camel case として認識
- 今回、記載していませんが、環境変数:SPRING_PROFILES_ACTIVE=dev 等により application-dev.yml のような設定に切り替え可能
参考url
https://www.saka-en.com/java/spring-boot-read-yaml/
https://www.saka-en.com/java/spring-boot-get-yaml-value/
サンプルアプリの構成
今回は、 application.yml の内容を CommonConf.java で読み、 Controller1.java で json形式で出力(といっても単なるdump)します。
src/main/java/ jp.end0tknr/ ---1) SpringBootDomaApplication.java ---2) Controller1.java ---3) jp.end0tknr.conf/ ---4) CommonConf.java ---5) src/main/resources/ ---6) application.yml ---7) build.gradle ---8)
- 1),2) : spring bootがproject追加時に自動作成 (私は何もしていません)
- 3) : 設定fileの内容をjsonで返すrest controller
- 4),5) : 設定fileへのアクセサ?
- 6),7) : 設定file
- 8) : 特別な変更は行っていませんが、参考として build.gradle を記載
application.yml
以下のようにサンプルを用意しました。 spring.datasource.~ は、value を変更することでmysqlへも接続できます。
spring: datasource: url: jdbc:mysql://192.168.244.101:3306/xing?useSSL=false&zeroDateTimeBehavior=convertToNull username: xingadm password: xxxxxxx driver-class-name: com.mysql.cj.jdbc.Driver common: app_root_url: https://www.google.co.jp login_url: https://www.yahoo.co.jp news_list: - top - tech - economy - weather
CommonConf.java
application.yml を読むためのもので、ポイントは「@Component」と 「@ConfigurationProperties(prefix="common")」。
「@Data」は、lombok によるアクセサメソッド自動生成の為のものです。
package jp.end0tknr.conf; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import lombok.Data; @Component @ConfigurationProperties(prefix="common") @Data public class CommonConf { private String appRootUrl; private String loginUrl; private String[] newsList; }
Controller1.java
設定内容の渡し方は様々ですが、今回は、commonConf に @Autowired し、 commonConf をそのまま return することで、json 形式で返しています。
package jp.end0tknr; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import jp.end0tknr.conf.CommonConf; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestController public class Controller1 { private static final Logger logger = LoggerFactory.getLogger(Controller1.class); @Autowired private CommonConf commonConf; @RequestMapping("/") public String index() { return "Hello Spring Boot !!" + commonConf.getAppRootUrl(); } @RequestMapping("/dumpconf") public CommonConf dumpConf() { return commonConf; } }``` # dump結果 ブラウザで、http://localhost:8080/dumpconf へアクセスすると、 次のように表示されます。 ** application.yml では、snakeで記載しましたが、camelで表示されています。 **
{"appRootUrl":"https://www.google.co.jp", "loginUrl":"https://www.yahoo.co.jp", "newsList":["top","tech","economy","weather"]}
※ 視認性を良くする為、上記には改行を入れ、整形しています **