Spring Bootは、一般的に使用される2つの構成ファイル、つまりプロパティファイルとYMLファイルを提供します。それらの機能は、Spring Boot Automatic構成のデフォルト値を変更することです。プロパティファイルと比較して、YMLファイルは若く、多くの落とし穴があります。彼が成功し、Xiaoを失敗させると言われることができます。 YMLは、構成ファイル構造でありクリアであるスペースを介した階層関係を決定しますが、重要でないスペースのために階層関係も破壊します。この章では、YMLの構文と構成ファイルから値を取得することに焦点を当てています。何を待っていますか?すぐに勉強してください!
テクノロジー:YAML、プロパティ構文、構成プロパティの使用と値注釈、構成ファイルプレースホルダーの使用
注:この章では、YAMLの構文とConfigurationProperties Annotationsの使用に焦点を当てています。コードと完全なコードのテストについては、GitHubに移動してください。それが好きな友達は星をクリックできます。
ソースコード:https://github.com/itdragonblog/daydayup/tree/master/springboot/spring-boot-yml
記事ディレクトリ構造:
1。YAMLの紹介
YMLはYAML(YAML AIN NOT MARKUP LANGUAGE)言語のファイルであり、データ中心であり、JSON、XMLなどよりも構成ファイルに適しています。
XMLと比較して、YMLは構造化されたコードが少ないため、一目でデータがより直接的かつ明確になります。
YMLとJSONはどうですか?誰も良いことも悪いことも、正しいものは最高です。 YMLの構文はJSONよりもエレガントで、より標準的な注釈があり、構成ファイルに適しています。マシン交換形式として、JSONはYMLよりも強く、API呼び出しのデータ交換により適しています。
1)YAML構文
空間のインデントの程度による階層的関係を制御します。左側のスペースが揃っている限り、スペースの数は重要ではありません。それらは同じレベルと見なされます。スペースの代わりにタブを使用できないことに注意してください。ケースに敏感です。リテラル値、オブジェクト、アレイの3つのデータ構造をサポートし、複合構造もサポートします。
リテラル値:文字列、ブールタイプ、数値、日付。文字列はデフォルトで引用されておらず、単一の引用は特殊文字を逃れます。日付形式はyyyy/mm/dd HH:mm:ssをサポートしています
オブジェクト:キー価値のペア、キー:(スペース)値の形式のデータで構成されています。結腸の後のスペースが必要です。キー価値ペアの各セットは1つのラインを占め、インデントの程度は一貫している必要があります。インラインライティング方法を使用することもできます:{k1:v1、.... kn:vn}
配列: - (スペース)値の形式のデータで構成されています。短い水平線の後ろのスペースが必要です。データの各セットは1行を占有し、インデントの程度は一貫している必要があります。インラインライティング方法を使用することもできます:[1,2、... n]
複合構造:上記の3つのデータ構造の任意の組み合わせ
ii)YAMLの適用
Spring Boot Global Configuration File application.ymlを作成し、プロパティパラメーターを構成します。主に文字列、特殊文字の文字列、ブール型の種類、値、コレクション、インラインコレクション、インラインオブジェクト、コレクションオブジェクトがあります。
YAML:STR:STRINGは引用符のない場合があります。 itdragonblog給与:18888.88
エンティティクラスの作成yamlentity.java構成ファイルでプロパティ値を取得し、@configurationPropertiesに注釈を付けて構成ファイルで指定された値を取得し、エンティティクラスに挿入します。その特定のテスト方法と値を取得する原則を引き続き見てください!
org.springframework.boot.context.properties.configurationproperties; Import org.springframework.stereotype.component; Import java.util.list; import java.util.map; import java.util.set;値 * 2。各行パラメーターの左側のスペース数は、パラメーターのレベルを決定し、ランダムに入力しません。 */@component@configurationProperties(prefix = "yaml")public class yamlentity {//リテラル値、文字列、ブール、数値プライベート文字列str; //通常の文字列private string specialstr; //スペシャルストリングプライベートストリングSpecialStr2; //出力スペシャルストリングプライベートブールフラグ。 // booleanタイププライベート整数num; // Integer Private double dnum; // decimal //配列、リスト、セット、書き込みの2つの方法:最初の方法: - スペース値、各値は1行を占有し、インデントとアライメントする必要があります。 2番目:[1,2、... n]インラインライティングプライベートリスト<Object>リスト。 //繰り返し可能なプライベートセット<オブジェクト>セットをリストします。 //セットを繰り返すことはできません2番目:{key:value、...}インラインライティングプライベートマップ<string、object> map; // KVプライベートリスト<位置>ポジションをマップします。 //複合構造、コレクションオブジェクト// omit getter、setter、toString method}3)YMLサマリー
1.文字列には引用符なしにできます。二重引用符が追加されると、特殊文字が出力されます。単一の引用符が追加されていない場合、特殊文字が逃げられます。
2。アレイタイプの場合、短い水平線の後ろにスペースが必要です。オブジェクトタイプの場合、コロンの後ろにスペースが必要です。
3. YAMLは、空間のインデントの程度に基づいて階層的な関係を制御しますが、TABキーはスペースの代わりに使用することはできません。
4.プログラマーをクラッシュさせる方法は? YMLファイルにいくつかのスペースを追加してください! (〃>皿<)
2。プロパティの紹介
誰もがプロパティファイルを使用することが多いため、ここで簡単に紹介します。その構文構造は次のようなものです:key = value。中国語の文字化けコードの問題に注意してください。また、ASCIIにトランスコードする必要があります。詳細は次のとおりです。
userInfo.account = itdragonbloguserinfo.age = 25userinfo.active = trueuserinfo.created-date = 2018/03/31 16:54:30USERINFO.MAP.K1 = V1USERINFO.MAP.K2 = V2USERINFO.LIST = NAMM ARCITION. userinfo.position.salary = 19999.99
構成ファイルから値を取得し、それらをYAMLと同じエンティティクラスに挿入します。
org.springframework.boot.context.properties.configurationProperties; Import org.springframework.stereotype.component; Import java.util.date; Import java.util.util.list; import java.util.map;構成ファイル(値はprefixを介して見つかります)*/@component@configurationProperties(prefix = "userInfo")public class userinfo {private stringアカウント;民間整数年齢;プライベートブールアクティブ; private Date CreatedDate;プライベートマップ<文字列、オブジェクト>マップ;プライベートリスト<Object>リスト;プライベートポジションの位置; // Getter、Setter、ToString Methodを省略}3。構成ファイル値
Spring Bootは、ConfigurationProperties Annotationを介して構成ファイルからプロパティを取得します。上記の例から、ConfigurationProperties Annotationは、プレフィックスを設定してバッチでインポートする必要があるデータを指定できることがわかります。リテラル、コレクション、マップ、オブジェクトなどの複雑なデータの取得をサポートします。ConfigurationPropertiesアノテーションについて他に何かありますか?それとスプリングの価値注釈の違いは何ですか?これらの質問を念頭に置いて、読み続けましょう。 (๑•̀ㅂ•́)陳点
a)ConfigurationPropertiesとValueの長所と短所
configurationpropertiesアノテーションの長所と短所
1.構成ファイルからプロパティを挿入できます。
2。複雑なデータ型の取得をサポートしています。
3。属性名を一致させる要件は、user-name、user_name、username、user_nameなど、すべて値を取得できます。
4。JSR303Javaのデータ検証をサポートします。
5.不利な点は、強力なスペル式をサポートしていないことです。
価値注釈の利点と短所はまったく逆です。注入値を1つずつ構成できます。配列やコレクションなどの複雑なデータ型はサポートしていません。データ検証はサポートしていません。プロパティ名のマッチングには厳しい要件があります。最大の機能は、Spel式をサポートし、機能をより豊かにすることです。
2)@configurationProperties詳細な説明
ステップ1:依存関係をインポートします。 ConfigurationProperties Annotationを使用するには、Spring-Boot-Configuration-Processorの依存関係をインポートする必要があります。
ステップ2:データを構成します。 application.yml構成ファイルでは、itdragonが付けた属性パラメーターを構成し、パラメーターにはリテラル値と配列があり、複雑な属性を取得する能力がサポートされているかどうかを判断するために使用されます。
ステップ3:データを一致させます。クラスにAnnotation ConfigurationPropertiesを追加し、ItDragonにプレフィックスプロパティ値を設定します。 SpringのIOCコンテナにこのクラスを追加します。
ステップ4:データを確認します。データ検証の検証された注釈を追加し、データ検証を有効にし、データ検証をサポートするかどうかをテストします。
ステップ5:ConfigurationProperties AnnotationがSPEL式をサポートするかどうかをテストします。
依存関係のインポート:pom.xmlスプリングブートコンフィグラープロセッサの依存関係を追加します
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-configuration-processor </artifactid> <optional> true </optional> </dependency>
構成データ:application.yml構成プロパティパラメーター、ニックネームは、一致するプロパティのゆるみを判断するために使用されます。 nick_nameに変更した場合でも、値を取得できます。
Itdragon:nick-name:itdragonblogメール:[email protected] iPhone:1234567890能力:[Java、SQL、HTML] created_date:2018/03/31 15:27:30
データを一致させて検証します:
org.springframework.boot.context.properties.configurationproperties; Import org.springframework.irteotype.component; Import org.springframework.validation.annotation.Validated; Import javax.validation.constraints.mail; Import java.util.util.util.util.util.util.datemail; ConfigurationProperties Annotation Syntax Class*ステップ1:依存関係スプリングブートコンフィグレータープロセッサをインポートします。 *ステップ2:ConfigurationProperties Annotationによって変更されたクラスをSpringのIOCコンテナに追加します。 *ステップ3:プレフィックス属性を設定し、注入する必要があるプレフィックスを指定します。 *ステップ4:データ検証の注釈を追加して、データ検証を有効にします。 **注:* 1。ニックネームとcreatedDateはYML構成ファイルにあり、対応するパラメーターはそれぞれメッシュとアンダースコアであり、一致する属性名のゆるみをテストするために使用されます。* 2。 configurationPropertiesEntity {private string nickname; //正常に解析し、ゆるい一致属性をサポートするプライベート文字列メール;プライベートリスト<文字列>能力; private Date CreatedDate; //正常に解析し、緩いマッチング属性をサポートする// @configurationProperties( "#{(1+2-3)/4*5}")プライベートストリングオペレーター。 //スペル式をサポートしていない構文エラー:フィールドに適用できません3)@Valueの詳細
以前のブログでは、価値注釈の使用が導入されており、簡単な説明があります。
ステップ1:$ {}設定パラメーターを介して、構成ファイルから属性と注入値を属性に追加します。
ステップ2:$ {itdragon.ceatred_date}のパラメーター値を変更し、$ {itdragon.ceatredate}に変更して、解析が成功できるかどうかをテストします。
ステップ3:データ検証の検証済みアノテーションを追加し、データ検証を有効にし、データ検証をサポートするかどうかをテストします。
ステップ4:値注釈がスペル式をサポートするかどうかをテストします。
Import org.springframework.beans.factory.annotation.value; import org.springframework.steleotyc.component; import org.springframework.validation.annotation.validated; Import javax.validation.constraints.email; Import Java.util.date; 1:属性に注釈値インジェクションパラメーターを追加*ステップ2:スプリングIOCコンテナに値注釈によって変更されたクラスを追加します。 *ステップ3:データ検証アノテーションを追加して、データ検証がサポートされているかどうかを確認します。 * *ノートポイント: *1。YML構成ファイルのニックネームとcreatedDate、対応するパラメーターはそれぞれメッシュとアンダースコアであり、一致する属性名の緩みをテストするために使用されます。 * 2。iPhoneにメールボックス検証アノテーションを追加することであるため、テストに合格することもできます。 * 3。複雑なデータ構造はサポートされておらず、迅速なエラーは最初のエラーと同じです:IllegalargumentException:Placeholder 'itdragon.abities' in value "$ {itdragon.abitivities}" */@component@validatedpublic class valueentity {@value( "$ {itddragon.nick-name}") ") @value( "$ {itdragon.email}")private string email; @email @value( "$ {itdragon.iphone}")//解析は成功しており、データ検証はプライベート文字列iPhone;解析エラーは、一致するゆるいプロパティをサポートせず、厳密に一貫したプライベートデートcreateddateでなければなりません。 //値注釈の強力な側面:SPEL Expression @Value( "#{(1+2-3)/4*5}")//算術演算プライベート文字列演算子。 @value( "#{1> 2 || 2 <= 3}")//リレーショナル操作プライベートブール比較; @value( "#{systemProperties ['java.version']}")// system configuration:os.name private string systemproperties; @value( "#{t(java.lang.math).abs(-18)}")//式private string mapexpression; // Getter、Setter、ToString Methodを省略}4)構成ファイル値の概要
1. ConfigurationPropertiesアノテーションはバッチインジェクションをサポートしますが、値注釈は単一の注入に適しています。
2。configurationpropertiesアノテーションはデータの検証をサポートしますが、値アノテーションはデータの検証をサポートしていません。
3. configurationpropertiesアノテーションは、一致するゆるいプロパティをサポートしますが、値の注釈は、プロパティを厳密に一致させる必要があります。
4. ConfigurationPropertiesは強力なSPEL式をサポートするものではありませんが、値はそれらをサポートします。
4。構成ファイルプレースホルダー
プレースホルダーと乱数は比較的単純なので、ここに直接コードを投稿します。注意すべきは、次のとおりです。
1.プレースホルダーの価値はフルパスでなければなりません
2.プレースホルダーのデフォルト値を設定すると、コロンの後にスペースがない必要があります
ran:#ここでのプレフィックスはランダムにできません、ran-value:$ {random.value} ran-int:$ {random.int} ran-long:$ {random.long} ran-int-num:$ {random.int(10)} ran-int-range:$ {random.int [10,20]} ran-placeholder _ $ placeholder _フルパスです} org.springframework.boot.context.properties.configurationProperties; Import org.springframework.stereeotype.component;/***ランダム数とプレースホルダーSyntax class*/@configurationProperties(prefix = "ran")public class {prival string ranvalue; //文字列プライベート整数ラニントをランダムに生成します。 //整数プライベートの長いranlongをランダムに生成します。 //長い整数プライベート整数ranintnumをランダムに生成します。 //指定された範囲内で整数プライベートをランダムに生成します整数Ranintrange; //整数プライベート文字列ranplaceholder; // Placeholder // Omit Getter、Setter、Tostring Method E}テストコード:@runwith(springrunner.class)@springboottestestedpublic springbootymbottympublicidetowrid springbootympliputim userinfo; @autowired private yamlentity yamlentity; @Autowired Private ConfigurationPropertiesEntity ConfigurationPropertiesEntity; @Autowired Private Valualentity ValueNtity; @Autowiredプライベートランダムエンティティランダムエンティティ。 @test public void contextloads(){// system.out.println( "yaml grammar:" + yamlentity); // system.out.println( "userininfo:" + userinfo); // system.out.println( "configurationproperties grammar:" + cufistuturationpropertiTiesentity); + valueentity); System.out.println( "ランダム文法:" + randomEntity); }}5。概要
1。SpringBootは、2つの形式で構成ファイルをサポートします。その中で、YAMLのデータ構造はプロパティよりも明確です。
2。YAMLは、構成ファイルの書き込みに特別に使用される言語であり、非常に簡潔で強力です。
3. YAMLには、スペースに厳しい要件があり、TABキーに置き換えることはできません。
4. YAMLは、空間インデンテーションの程度によってレベルを決定し、コロンに続く空間と短い水平線に続く空間を決定します。
5.構成プロパティアノテーションは、構成ファイルでのプロパティのバッチインジェクションに適しており、値アノテーションは構成ファイルでアイテムを取得するのに適しています。
6. configurationpropertiesアノテーションは、複雑なデータを取得するためにデータチェックサポートをサポートし、値注釈はスペル式をサポートします。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。