目次
1. 設定ファイルの概要
SpringBoot プロジェクトでは、ほとんどの構成にデフォルト値がありますが、デフォルト構成を置き換える場合は、application.properties、application.yml、または application.yaml を構成に使用できます。SpringBoot は、デフォルトで、リソース ディレクトリから application.properties または application.yml ファイルをロードします。このうち、application.properties ファイルはキーと値のペア形式のファイルであり、以前から使用されているため、プロパティ ファイルについてはこれ以上詳しく説明しません。
構成ファイルが SpringBoot プロジェクトのデフォルト構成をどのようにオーバーライドするかを知りたい場合は、次のリンクを確認してください。
Spring Boot リファレンス ドキュメントhttps://docs.spring.io/spring-boot/docs/2.7.6/reference/htmlsingle/#appendix.application-properties.server プロパティ ファイルに加えて、SpringBoot は構成用の YAML ファイルもサポートしています。YAML ファイルの拡張子は .yml または .yaml で、基本的な要件は次のとおりです。
- 大文字と小文字を区別
- インデントを使用して階層関係を表現する
- 同じ部分は一度しか出てこない
たとえば、プロパティ ファイルを使用して Tomcat ポートを構成します。
サーバー.ポート=8888
そして、YAML ファイルを使用して Tomcat ポートを設定します。
サーバー:
ポート: 8888
2. 簡易データの設定
デフォルト設定をオーバーライドするだけでなく、プロジェクトで使用するために YAML ファイル内の他の情報を設定することもできます。簡単なデータを構成する方法は次のとおりです。
文法:
データ名:値
例:
名前:リル
注: 値の前にスペースがあります
3. オブジェクトデータの設定
文法:
オブジェクト:
属性名 1: 属性値
属性名 2: 属性値
# または
オブジェクト: {属性名 1: 属性値, 属性名 2: 属性値}
例:
学生:
年齢: 10 歳
女性: 男性
住所: 広州
# 学生 2
学生 2: {性別: 男性、年齢: 10、住所: 広州}
注: 属性名の前のスペースの数に制限はありません。YML 構文では、各属性の前のスペースの数が同じである限り、同じインデントは同じレベルを表します。
4. 収集データの設定
文法:
設定:
- 値 1
- 値 2
# または
設定: [値 1, 値 2]
例:
city1:
- 北京
- 上海
- 深セン
- 広州#コレクション内の要素はオブジェクトです
生徒:
- スコア: 100
名前: zhangsan
年齢: 10
- スコア: 95
名前: lisi
年齢: 25
- スコア: 78
名前: wangwu
年齢: 15ユーザー:
ID: 1001
ユーザー名: LYL
住所:
- 北京
- 上海
- 広州
- 深セン
成績:
- 科目: 数学
スコア: 90
- 科目: 英語
スコア: 39
5. 設定ファイルデータの読み取り
@Value アノテーションを使用して、構成ファイル内の値を Spring 管理 Bean のフィールドにマップできます。
yml ファイルは次のとおりです。
name: zhangsan
student:
age: 10
female: male
address: Guangzhou
city1:
- Beijing
- Shanghai
- Shenzhen
- Guangzhou
students:
- score: 100
name: zhangsan
age: 10
- score: 95
name: lisi
age: 25
- score: 78
name: wangwu
age: 15
user:
id: 1001
username: LYL
address:
- Beijing
- Shanghai
- Guangzhou
- Shenzhen
grades:
- subject: math
score: 90
- subject: english
score: 39
構成ファイルを読み取ります。
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class YmlController1 {
@Value("${name}")
private String name;
@Value("${students[1].name}")
private String stu_name;
@Value("${city1[3]}")
private String address;
@RequestMapping("/yml1")
@ResponseBody
public String yml1(){
System.out.println(name);
System.out.println(stu_name);
System.out.println(address);
return name+" "+stu_name+" "+address;
}
}
次に、それを実行してデータを取得できるかどうかを確認します。
OK、コンソールと Web ページの両方でデータを正常に読み取ることができます。
ただし、@Value は単純なデータ型のみをマップでき、yaml ファイル内のオブジェクトとコレクションを属性にマップできないことに注意してください。
では、エンティティ クラスにどのようにマップすればよいでしょうか? @ConfigurationProperties(prefifix="object") を使用すると、構成ファイル内の構成をエンティティに自動的にマップできるため、yml ファイルで構成されたオブジェクト プロパティを直接エンティティ クラスにマップできます。豆。
OK、新しいエンティティ クラス Grade を作成しましょう。User 属性には次のオブジェクトが含まれているためです。
package com.example.demo.pojo;
public class Grade {
private String subject;
private int score;
public Grade(){};
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Grade [ " +
"subject='" + subject + '\'' +
", score=" + score +
" ]";
}
}
次に、構成ファイルを読み取るためのコントロール クラスを作成します。
package com.example.demo.controller;
import com.example.demo.pojo.Grade;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
@ConfigurationProperties(prefix = "user")
public class YmlController2 {
private int id;
private String username;
private List<String> address;
private List<Grade> grades;
@RequestMapping("/yml2")
public void yml2(){
System.out.println(id);
System.out.println(username);
System.out.println(address);
System.out.println(grades);
}
@Override
public String toString() {
return "YmlController2 [" +
"id=" + id +
", username='" + username + '\'' +
", address=" + address +
", grades=" + grades +
" ]";
}
public YmlController2() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<String> getAddress() {
return address;
}
public void setAddress(List<String> address) {
this.address = address;
}
public List<Grade> getGrades() {
return grades;
}
public void setGrades(List<Grade> grades) {
this.grades = grades;
}
}
さて、実行してデータを取得できるかどうかを確認してみましょう。
[OK] がコンソールに正常に表示され、注釈が有効で使用できることが示されます。
6. プレースホルダーの使用
${} プレースホルダーは YAML ファイルで使用できます。これには 2 つの機能があります。
設定ファイルの値を使用する
たとえば、カスタム ポートを使用してページに表示します。設定ファイルは次のとおりです。
別のコントローラーメソッドを書いてみましょう
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class YmlController3 {
@Value("${myConfig.serverPort}")
private int port;
@RequestMapping("yml3")
@ResponseBody
public String getPort(){
return "你的自定义端口为:"+port;
}
}
テストの実行
注入も成功することができます。
フレームワークが提供するメソッドを使用する
SpringBoot フレームワークには、yml ファイルで使用できる乱数を生成するためのメソッドがいくつか用意されています。
- ${random.value}: 「-」接続なしで、uuid に似た乱数を生成します。
- ${random.uuid}: ダッシュで接続された uuid を生成します
- ${random.int}: 整数の範囲内の値をランダムに選択します
- ${random.int(10)}: 10 以内の数値をランダムに生成します
- ${random.int(100,200)}: 100 ~ 200 の範囲内の数値をランダムに生成します。
- ${random.long}: 長整数範囲内の値をランダムに選択します
- ${random.long(100,200)}: 100 ~ 200 の範囲の Long 整数値をランダムに生成します。
たとえば、ポート 1000 ~ 9999 をランダムに生成します。