[Spring Boot] 設定ファイル YML: 開始と使用

1.YML設定ファイルの概要

YML ファイル形式は、YAML (YAML Aint Markup Language) で記述されたファイル形式です。YAML は、コンピュータで認識でき、人間が読みやすく、スクリプト言語と対話しやすく、直感的なデータシリアル化形式です。サポートされている YAML ライブラリは、C/C++、Ruby、Python、Java、Perl、C#、PHP などのさまざまなプログラミング言語プログラムをインポートします。YML ファイルはデータ中心であり、従来の xml 方式よりも簡潔ですが、データを記述する方法は xml よりも若干難しくなります。
YML ファイルの拡張子は .yml または .yaml で、拡張子は異なりますが、両者に本質的な違いはありません。

2. YML設定ファイルの構文

  1. 通常のデータ(単一のキー値)を構成する

構文:キー: 値

例:キーとコロンの間にはスペースはありませんが、値とスペースの間には英半角スペースが必要です。

# 配置普通数据
name: chenfeilin

  1. オブジェクト データの構成 (オブジェクトには複数の属性と対応する値が含まれます)

文法1
key:
key1: value1
key2: value2

例: key1 の前のスペースの数に制限はありません。YML 構文では、同じインデントは同じレベルを表しますが、通常、デフォルトは 2 つのスペースです。インデントの量も読み取りに影響します。

# 配置对象数据1
person:
  name: feilin
  age: 24

文法2
キー: {キー1: 値1,キー2: 値2}

例:

# 配置对象数据2
student: {
    
    name: stu,age: 77}

  1. 地図データの設定
    構文は上記と同じで、上記のデータ構造はオブジェクトまたはマップ コレクションとして解析できます。ここではこれ以上の例はありません。

  2. 配列(List、Set)データの設定

文法1
キー:
- 値1
- 値2

例: value1 と - の間にスペースがあります

# 配置数组(List、Set)数据1
mylist:
  - chenfeilin
  - 777
  - nagasawa_masami

文法2
キー: [値1,値2]

例:

# 配置数组(List、Set)数据2
city: [beijing,tianjin,shanghai,chongqing]

コレクション内の要素がオブジェクトの形式である場合:

# 集合中的元素是对象形式
users:
  - name: zhangsan
    age: 18
  - name: lisi
    age: 28
  - name: wangwu
    age: 38

3. @Value に注釈を付けて、構成ファイルと構成クラスのプロパティをマップします。

@Value アノテーションは、構成ファイル内の単一のキー値をマップするために使用されます。
コントローラーを作成し、構成ファイル内の値を受け取るためのいくつかのプロパティを定義します。

@RestController
public class TestController {
    
    

    @Value("${name}")
    private String name;

    @Value("${person.name}")
    private String personName;

    @RequestMapping(value = "/getValue")
    public String TestMapping() {
    
    

        System.out.println("name: " + name);
        System.out.println("personName: " + personName);

        return "request OK";
    }

}

プロジェクトを開始し、http://localhost:8080/getValue に
ここに画像の説明を挿入します
正常にアクセスします。次にコンソールを確認します。
ここに画像の説明を挿入します

4. @ConfigurationProperties 構成マッピングに注釈を付ける

注釈 @ConfigurationProperties を使用して、構成ファイル内のオブジェクト値の Java 構成オブジェクトへのマッピングを完了します。

具体的な使用方法は、 @ConfigurationProperties (prefix = "設定ファイル内のキーのプレフィックス") アノテーションを付けることで、設定ファイル内の設定をエンティティに自動的にマッピングすることです。たとえば、設定ファイル内の
person

person:
  name: feilin
  age: 24

コードを見てみましょう:

// 先提供一个载体,用来作为接收对象
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    
    

    private String name;
    private int age;

    @Override
    public String toString() {
    
    
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

// 然后修改并获取到person
@RestController
public class TestController {
    
    

    @Value("${name}")
    private String name;

    @Autowired
    private Person person;

    @Value("${person.name}")
    private String personName;

    @RequestMapping(value = "/getValue")
    public String TestMapping() {
    
    

        System.out.println("name: " + name);
        System.out.println("person: " + person);
        System.out.println("personName: " + personName);

        return "request OK";
    }

}

コンソール出力に問題はありません:
ここに画像の説明を挿入します
person クラスは get メソッドと set メソッドを提供する必要があることに注意してください。そうでない場合、設定ファイルの値は取得されません。このアノテーションは、set メソッドを通じて対応する属性に値を割り当てます。 。@value アノテーションを使用する場合、set メソッドは必要ありません。

コレクションや配列型などの他の型も設定できるので、設定ファイルを変更しましょう。

person:
  name: feilin
  age: 24
  mylist:
    - chenfeilin
    - 777
    - nagasawa_masami
  address: [beijing,tianjin,shanghai,chongqing]
  girlFriends:
    - girlName: zhangsan
      girlAge: 18
    - girlName: lisi
      girlAge: 28
    - girlName: wangwu
      girlAge: 38

また、構成クラスを変更し、別のクラスを追加します。

// 添加类gril
public class Girl {
    
    

    private String girlName;
    private int girlAge;

    public String getGirlName() {
    
    
        return girlName;
    }

    public void setGirlName(String girlName) {
    
    
        this.girlName = girlName;
    }

    public int getGirlAge() {
    
    
        return girlAge;
    }

    public void setGirlAge(int girlAge) {
    
    
        this.girlAge = girlAge;
    }

    @Override
    public String toString() {
    
    
        return "Girl{" +
                "girlName='" + girlName + '\'' +
                ", girlAge=" + girlAge +
                '}';
    }
}

// 修改配置类如下
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    
    

    private String name;
    private int age;
    private List<String> mylist;
    private String[] address;
    private Set<Girl> girlFriends;

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    public List<String> getMylist() {
    
    
        return mylist;
    }

    public void setMylist(List<String> mylist) {
    
    
        this.mylist = mylist;
    }

    public String[] getAddress() {
    
    
        return address;
    }

    public void setAddress(String[] address) {
    
    
        this.address = address;
    }

    public Set<Girl> getGirlFriends() {
    
    
        return girlFriends;
    }

    public void setGirlFriends(Set<Girl> girlFriends) {
    
    
        this.girlFriends = girlFriends;
    }

    @Override
    public String toString() {
    
    
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", mylist=" + mylist +
                ", address=" + Arrays.toString(address) +
                ", girlFriends=" + girlFriends +
                '}';
    }
}

最終的なコンソール出力:

名前: チェンフェイリン
人物: 人物{name='feilin', age=24, mylist=[chenfeilin, 777, nagasawa_masami], address=[北京、天津、上海、重慶]、girlFriends=[Girl{girlName='zhangsan', girlAge=18}, Girl{girlName='lisi', girlAge=28}, Girl{girlName='wangwu', girlAge=38}]}
personName: feilin

複数の yml 設定ファイルがある場合は、設定クラスにマッピングするときに @PropertySource アノテーションを付けることでそれらを区別できます。
最初に設定ファイルを作成し、それに person のコンテンツをコピーしてから、
ここに画像の説明を挿入します
特定のアノテーションを person クラスに追加します。用途は以下の通りです。

@Component
@ConfigurationProperties(prefix = "person")
@PropertySource(value = {
    
    "classpath:abc.yml"}, factory = YamlPropertySourceFactory.class)
public class Person {
    
    ...}

// 这里需要注解里需要指定一个yaml的加载工厂类,我们可以自己去定义一个:
// 使用的是YamlPropertySourceLoader类的load方法
public class YamlPropertySourceFactory extends DefaultPropertySourceFactory {
    
    

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
    
    
        if (resource == null) {
    
    
            return super.createPropertySource(name, resource);
        }
        List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource());
        return sources.get(0);
    }
}

/**
导的包如下:
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
*/

コンソール出力は変更されません。

person: person{name='feilin', age=24, mylist=[chenfeilin, 777, nagasawa_masami], address=[北京、天津、上海、重慶]、girlFriends=[Girl{girlName='zhangsan'、girlAge=18] }、女の子{girlName='lisi'、girlAge=28}、女の子{girlName='wangwu'、girlAge=38}]}

ここで注意すべき点の 1 つは、アノテーション @PropertySource は、ファクトリ属性を指定せずにエラーを報告することはありませんが、yml 設定ファイルに値をロードすることはできないということです。ここでは、それを使用する必要があります。デフォルトのローダーがインストールされていますが、デフォルトでは yml ファイルのロードをサポートしていないため、ファクトリ クラスをロードするにはこの yml ファイルを忘れずに追加してください。

5. SpringBoot設定情報の問い合わせ

SpringBoot の設定ファイルの主な目的は、デフォルトの設定情報を変更することですが、すべての設定キーの値を完全に覚えておくことは不可能です。使用する際はドキュメントを参照してください。ここでは springboot [ 2.0.1.RELEASE ] を
示します。バージョンの公式 Web サイトの設定ドキュメント:
ドキュメントの URL:
https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#common-application-properties

6. YML ファイル構成情報のコードプロンプト

上記の公式 Web サイトで提供されている設定情報のクエリは、設定情報を一から理解するのに役立ちます。設定情報を使いこなして使いこなすようになると、必ず情報を確認せずに直接書き込むことになります。しかし、さまざまな不安があるため、この説明の理由は、私が間違ったボールを書いたためです。現時点では、記憶を取り戻すためにいくつかのプロンプト関数が必要です。

このコンテンツを紹介しているブログはたくさんありますが、コードを書く必要はなく、技術的な内容ではないので、車輪の再発明はしません。以前見たブログへのリンクです。 idea は SpringBoot yml ファイルをサポートしておらず、中国語のコメントが
文字化け
します。 :
Spring Boot application.yml ファイル 中国語のコメントが文字化けします

補足:
私が使用しているアイデアのバージョンは比較的新しいため、
ここに画像の説明を挿入します
使用されているプラ​​グインは上記のブログのものと一致しない可能性があります。

ここに画像の説明を挿入します

追加するには:
yml ファイルを自分で作成する場合、または JBLSpringBootAppGen プラグインなどの他のプラグインを使用して yml ファイルを作成する場合、ファイルを作成するだけでは、yml にプロンプ​​トが存在しないことがわかります。前のプロジェクトに既に存在する場合でも、ヒント: この時点ではまだプロンプトが表示されない可能性があります。yml ファイルを操作する前にプロジェクトを再構築する必要があります。そうすれば、プロンプトが有効になります。0.0
ここに画像の説明を挿入します

7.YML ファイルは互いにネストして使用されます

yml ファイルが長すぎる場合、または業務に応じて分割したい場合は、次の構成を使用して分割されたサブ構成ファイルを導入できます。

ネストされた単一:

spring:
  profiles:
    include:filename

複数のネスト:

spring:
  profiles:
    include:
      - filename1
      - filename2

サブ構成ファイルの名前は application-xxx.yml です。たとえば、単一の構成ファイルをネストする場合は application-filename.yml となります。

8. SpringBootは複数のYMLファイルに対応した複数の環境を構築します

リンクは次のとおりです。
1. Springboot マルチ環境構成ファイル、複数の yml 構成ファイルを含める方法は? この記事を読めば十分です
2. Springboot は複数の yml ファイルを設定します
3. SpringBoot の application.yml 切り替え関連の設定 (カスタム、開発、テスト、公式) について

おすすめ

転載: blog.csdn.net/cjl836735455/article/details/109370821