二、SpringBootの構成--yaml

7666 ワード

1、プロファイル
SpringBootはグローバルなプロファイルを使用し、プロファイル名は固定されています.
  • application.properties
  • application.yml

  • プロファイルの役割:SpringBoot自動構成のデフォルト値を変更します.SpringBootは下部で自動的に構成されています.
    YAMLはタグ言語です
    タグ言語:
    以前のプロファイル;ほとんどがxxxを使用しています.xmlファイル
    YAML:データ中心で、json、xmlなどよりプロファイルに適している
    YAML:構成例
    server:
      port: 8081
    

    XML:
    
      8081
    
    

    2、YAML文法
    2.1、基本文法
    k:(スペース)v:一対のキー値ペアを表す(スペースは必須)
    スペースのインデントで階層関係を制御します.左揃えのデータ列であれば、同じレベルです.
    server:
      port: 8081
      path: /hello
    

    属性と値も大文字と小文字に敏感です.
    2.2、値の書き方
    字面量:通常の値(数値、文字列、ブール)
    k:v:字面は直接書きます;
    文字列のデフォルトでは、一重引用符または二重引用符を付ける必要はありません.
    """:二重引用符;文字列の中の特殊な文字はエスケープされません.特殊文字は自分が表現したい意味になります
    name:「zhangsan lisi」:出力:zhangsan改行lisi
    ':一重引用符;特殊文字がエスケープされ、特殊文字は最終的には普通の文字列データにすぎません
    name:'zhangsan lisi':出力;zhangsan lisi
    オブジェクト、map(プロパティと値)(キー値ペア)
    k:v:次の行にオブジェクトの属性と値の関係を書きます.注意インデント
    オブジェクトはk:vの方法です
    friends:
        lastName: zhangsan
        age: 20
    
    

    行内の書き方:
    friends: {lastName: zhangsan,age: 18}
    

    配列(List,Set):
    配列内の要素を-値で表す
    pets:
        - cat
        - dog
        - pig
    

    行内の書き方
    pets: [cat,dog,pig]
    

    3、プロファイル値注入
    プロファイル
    person:
        lastName: hello
        age: 18
        boss: false
        birth: 2017/12/12
        maps: {k1: v1,k2: v2}
        lists:
            - lisi
            - zhaoliu
        dog:
            name:   
            age: 12
    
    

    javaBean:
    /**
                     ,        
     @ConfigurationProperties:  SpringBoot                        ; 
     prefix = "person" :                    
     
                  ,       ConfigurationProperties  ;
    */
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
        private Map maps;
        private List lists;
        private Dog dog;
    

    プロファイルプロセッサをインポートできます.後で構成を作成するとヒントがあります.
      
    
            org.springframework.boot
            spring-boot-configuration-processor
            true
    
    

    3.1、propertiesプロファイルideaのデフォルトUTF-8は文字化けしている可能性がある
    調整図:
    3.2、@Value取得値と@ConfigurationProperties取得値の比較
    @ConfigurationProperties
    @Value
    機能
    一括注入プロファイルのプロパティ
    個々の指定
    ルーズバインド(ルーズ構文)
    サポート
    サポートされていません
    SpEL
    サポートされていません
    サポート
    JSR 303データチェック
    サポート
    サポートされていません
    複雑なタイプのパッケージ
    サポート
    サポートされていません
    プロファイルymlもpropertiesも値を取得できます.
    ビジネスロジックでプロファイルの値を取得する必要がある場合は、@Valueを使用します.
    プロファイルとマッピングするjavaBeanを作成する場合は、@ConfigurationPropertiesを直接使用します.
    3.3、プロファイル注入値データ検査
    @Component
    @ConfigurationProperties(prefix = "person")
    @Validated
    public class Person {
        @Email
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
        private Map maps;
        private List lists;
        private Dog dog;
    

    3.4、@PropertySource,@Import,@Bean
    @PropertySource:指定したプロファイルのロード
    /**
                    ,        
    @ConfigurationProperties:  SpringBoot                        ;
    prefix=“person”:                    
    @Component
                 ,       @ConfigurationProperties  
    @ConfigurationProperties(prefix="person")             
    **/
    @Component
    @PropertySource(value = {"classpath:person.properties"})
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
        private Map maps;
        private List lists;
        private Dog dog;
    

    @ImportResource:Springのプロファイルをインポートし、プロファイルの内容を有効にします.
    SpringBootにはSpringのプロファイルがなく、自分で作成したプロファイルも自動的に認識できません.
    Springのプロファイルを有効にするには、ロードします.@ImportResource寸法は構成クラスに表示されます
    @ImportResource(locations={"classpath:beans.xml"})
      Spring         
    

    Springのプロファイルを作成しない
    
    
        
            
        
    
    

    Spring Bootはコンテナにコンポーネントを追加する方法を推奨します.全注釈の推奨方法
    1、コンフィギュレーションクラス@Configuration----->Springプロファイル
    2、@Beanを使用してコンテナにコンポーネントを追加する
    @Configuration
    public class MyAppConfig {
        //              ;          id     
        @Bean
        public Dog HelloDog(){
            return new Dog("  ","    ");
        }
    
    }
    

    4、プロファイルプレースホルダ
    4.1、乱数
    ${random.value},${random.int},${random.long}
    ${random.int(10)},${random.int[1024,65536]}
    

    4.2、プレースホルダは以前に設定した値を取得し、使用可能でない場合:デフォルト値を指定する
    person.lastName=zhangsan${random.uuid}
    person.age=${random.int(10)}
    person.boss=false
    person.birth=2011/12/12
    person.maps.k1=v1
    person.maps.k2=14
    person.lists=a,b,c
    person.dog.name=${person.lastName:hello}_dog
    person.dog.type=    
    

    5、profile
    5.1、マルチプロファイルファイル
    プライマリプロファイルの作成時に、ファイル名はアプリケーション{profile}でもよい.properties/yml
    デフォルトではアプリケーションが使用されます.propertiesの構成
    5.2、ymlはマルチドキュメントブロック方式をサポートする
    server:
      port: 8081
    spring:
      profiles:
        active: prod
    ---
    server:
      port: 8083
    spring:
      profiles: dev
    
    ---
    server:
      port: 8084
    spring:
      profiles: prod
    #person:
    

    5.3、指定profileをアクティブにする
    1.プロファイルにspringを指定する.profiles.active=dev
    2、コマンドライン:
    java -jar spring-boot-02-config.jar --spring.profiles.active=dev;
    直接テスト時に、入力コマンドラインパラメータを構成できます.
    3.仮想マシンパラメータ
    -Dspring.profiles.active=dev
    6、プロファイルのロード場所
    Springboot起動は以下の位置のアプリケーションをスキャンします.propertiesまたはapplication.ymlファイルSpring Bootのデフォルトプロファイルとして
    -file:./config/
    -file:./
    -classpath:/config/
    -classpath:/
    優先度が高い構成から低い構成まで、優先度の高い構成は優先度の低い構成を上書きします.
    SpringBootでは、この4つの場所からプライマリプロファイルがロードされます.相補的な構成です.
    ==springも使えます.config.locationでデフォルトのプロファイルの場所を変更==
    プロジェクトをパッケージ化した後、コマンドラインパラメータの形式を使用して、プロジェクトを起動するときにプロファイルの新しい場所を指定することができます.プロファイルとデフォルトでロードされたプロファイルが相補的な構成として機能することを指定します.
    java -jar spring-boot-02-config.jar --spring.config.location=G:/application.properties
    7、外部構成のロード順序
    ==SpringBootは、以下の場所から構成をロードすることもできます.優先度が高いから低いまで;優先度の高い構成優先度の低い構成では、すべての構成が相補的な構成になります==
    1.コマンドラインパラメータ
    2.java:comp/envからのJNDI属性
    3.javaシステムのプロパティ
    4.オペレーティングシステム環境変数
    5.RandomValuePropertySource構成のrandom.*属性値
    ==jarパッケージの外箱jarパッケージ内を探しています==
    ==優先ローディングテープprofile==
    6.jarパッケージ外部のアプリケーション-{profile}propertiesまたはapplication.yml(spring.profile付き)プロファイル
    7.jarパッケージ内部のアプリケーション-{profile}propertiesまたはapplication.yml(spring.profile付き)プロファイル
    ==profileなしで再ロード==
    8.jarパッケージ外部のアプリケーション.propertiesまたはapplication.yml(spring.profileなし)プロファイル
    9.jarパッケージ内部のアプリケーション.propertiesまたはapplication.yml(spring.profileなし)プロファイル
    真髄:
    1』springboot起動は大量の自動構成クラスをロードする
    2』springbootのデフォルトで書かれた自動構成クラスが必要かどうかを見てみましょう.
    3』この自動構成クラスには、いったいそれらのコンポーネントが配置されているのかを見てみましょう.(使用するコンポーネントがあれば、再構成する必要はありません)
    4』コンテナの自動構成クラスにコンポーネントを追加すると、propertiesクラスからいくつかのプロパティが取得され、プロファイルでこれらのプロパティの値を指定できます.