二、SpringBootの構成--yaml
7666 ワード
1、プロファイル
SpringBootはグローバルなプロファイルを使用し、プロファイル名は固定されています. application.properties application.yml
プロファイルの役割:SpringBoot自動構成のデフォルト値を変更します.SpringBootは下部で自動的に構成されています.
YAMLはタグ言語です
タグ言語:
以前のプロファイル;ほとんどがxxxを使用しています.xmlファイル
YAML:データ中心で、json、xmlなどよりプロファイルに適している
YAML:構成例
XML:
2、YAML文法
2.1、基本文法
k:(スペース)v:一対のキー値ペアを表す(スペースは必須)
スペースのインデントで階層関係を制御します.左揃えのデータ列であれば、同じレベルです.
属性と値も大文字と小文字に敏感です.
2.2、値の書き方
字面量:通常の値(数値、文字列、ブール)
k:v:字面は直接書きます;
文字列のデフォルトでは、一重引用符または二重引用符を付ける必要はありません.
""":二重引用符;文字列の中の特殊な文字はエスケープされません.特殊文字は自分が表現したい意味になります
name:「zhangsan lisi」:出力:zhangsan改行lisi
':一重引用符;特殊文字がエスケープされ、特殊文字は最終的には普通の文字列データにすぎません
name:'zhangsan lisi':出力;zhangsan lisi
オブジェクト、map(プロパティと値)(キー値ペア)
k:v:次の行にオブジェクトの属性と値の関係を書きます.注意インデント
オブジェクトはk:vの方法です
行内の書き方:
配列(List,Set):
配列内の要素を-値で表す
行内の書き方
3、プロファイル値注入
プロファイル
javaBean:
プロファイルプロセッサをインポートできます.後で構成を作成するとヒントがあります.
3.1、propertiesプロファイルideaのデフォルトUTF-8は文字化けしている可能性がある
調整図:
3.2、@Value取得値と@ConfigurationProperties取得値の比較
@ConfigurationProperties
@Value
機能
一括注入プロファイルのプロパティ
個々の指定
ルーズバインド(ルーズ構文)
サポート
サポートされていません
SpEL
サポートされていません
サポート
JSR 303データチェック
サポート
サポートされていません
複雑なタイプのパッケージ
サポート
サポートされていません
プロファイルymlもpropertiesも値を取得できます.
ビジネスロジックでプロファイルの値を取得する必要がある場合は、@Valueを使用します.
プロファイルとマッピングするjavaBeanを作成する場合は、@ConfigurationPropertiesを直接使用します.
3.3、プロファイル注入値データ検査
3.4、@PropertySource,@Import,@Bean
@PropertySource:指定したプロファイルのロード
@ImportResource:Springのプロファイルをインポートし、プロファイルの内容を有効にします.
SpringBootにはSpringのプロファイルがなく、自分で作成したプロファイルも自動的に認識できません.
Springのプロファイルを有効にするには、ロードします.@ImportResource寸法は構成クラスに表示されます
Springのプロファイルを作成しない
Spring Bootはコンテナにコンポーネントを追加する方法を推奨します.全注釈の推奨方法
1、コンフィギュレーションクラス@Configuration----->Springプロファイル
2、@Beanを使用してコンテナにコンポーネントを追加する
4、プロファイルプレースホルダ
4.1、乱数
4.2、プレースホルダは以前に設定した値を取得し、使用可能でない場合:デフォルト値を指定する
5、profile
5.1、マルチプロファイルファイル
プライマリプロファイルの作成時に、ファイル名はアプリケーション{profile}でもよい.properties/yml
デフォルトではアプリケーションが使用されます.propertiesの構成
5.2、ymlはマルチドキュメントブロック方式をサポートする
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クラスからいくつかのプロパティが取得され、プロファイルでこれらのプロパティの値を指定できます.
SpringBootはグローバルなプロファイルを使用し、プロファイル名は固定されています.
プロファイルの役割: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
プロファイルプロセッサをインポートできます.後で構成を作成するとヒントがあります.
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
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
@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クラスからいくつかのプロパティが取得され、プロファイルでこれらのプロパティの値を指定できます.