YAML構文に最初に精通している、YAML構文の概要@ConfigurationPropertiesアノテーションの使用法

YAML構文

1. YAMLの基本構文:

キー:スペース値とは、
スペースインデントのあるキーと値のペア(スペースが存在する必要があります)のペアを意味します。ヌル値の階層:左揃えである限り、数値データの列は同じレベルにあります。

server: 
	port: 8081
	path: /hello

属性と値でも大文字と小文字が区別されます。

2.値の書き方

リテラル:通常の値(数値、文字列、ブール値)
k:vリテラルを直接記述します。文字列
を一重引用符または二重引用符で囲む必要はありません。
"":二重引用符:文字列内の特殊文字はエスケープされません。 ;特別キャラクターは彼らが表現したいものになります。
名前: "zhangsan \ nリスト":出力:zhangsan改行リスト
'':一重引用符:特殊文字が転送され、最終的に特殊文字は通常の文字列に変換されます。
名前: "zhangsan \ nリスト":出力:zhangsan \ nリスト

オブジェクト、マップ(属性と値)(キーと値のペア):
k:v次の行にオブジェクトの属性と値の関係を記述します;
オブジェクトのインデントはまだk:vであることに注意してください

  • 通常の書き込み
		friends: 
			lastName: zhangsan
			age: 20
  • インラインライティング:
friends: {
    
    lastName: zhangsan,age: 18}

配列(リスト、セット):
配列内の要素を表すための使用価値

  • 通常の書き込み
pets:
 - cat
 - dog
 - pig
  • インラインライティング
pets: [cat,dog,pig]

3.構成ファイルの値の挿入

yaml構成構成ファイルの書き込み

person:
	birthday: "2020-01-01"
	name: zhangsan
	age: 55
	pets: [cat,dog,pig]
	isBoss: true
	friends:
		- lisi
		- wangwu
		- zhaoliu
	maps: {
    
    k1: v1,k2: 12}
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中;
* @ConfigurationProperties : 告诉SpringBoot将本类中的所有属性和配置文件中相关的属性进行	* 绑定;
* prefix = “peron” : 配置文件中哪个下面的所有属性进行一一映射;
* 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能;
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person{
    
    
	private String lastName;
	private Integer age;
	private Boolean isBoss;
	private Date birthday;
	
	private Map<String,Object> maps;
	private List<Friends> friends;
	
	...
}

pom.xml

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

対応するプロパティの記述

person.lase-name=张三
person.age=18
person.birthday=2020/10/10
person.boss=false
person.maps.k1=v1
person.maps.k2=12
person.lists=a,b,c
person.dog.name=dog
person.dog.age=5
  • アイデアのプロパティ構成ファイルのデフォルトのエンコーディングはutf-8であることに注意してください。

アイデア設定でファイルエンコーディングを見つけ、チェックマーク(実行時のトランスコーディング)を選択します。中国語を変更しないと、文字化けします。
ここに画像の説明を挿入

4.環境変数と構成ファイルを使用して値を取得します

文字列でのxml値のバインディング書き込み

<bean class="Person">
	<property name="lastName" value="字面量/${key}从环境变量、配置文件中回去值/#{spEl}">
</bean>

Javaコードで値を取得する

@Component
@ConfigurationProperties(prefix = "person")
public class Person{
    
    
	
	@Value("${person.last-name}")
	//lastName 必须是邮箱格式
	@Email 
	private String lastName;
	@Value("#{11*2}")
	private Integer age;
	@Value("${maps}")//会注入失败,因为不能匹配复杂数据类型
	private Map<String,Object> maps;
	
}
注釈 @ConfigurationProperties @値
特徴 構成ファイルへのプロパティの一括注入 一つずつ
ゆるく縛られている 待機する サポートしません
ゲーム サポートしません 待機する
JSR303データ検証 待機する サポートしません
複合型パッケージ 待機する サポートしません
  • @ConfigurationPropertiesを使用して上記の値を設定すると、@ Emailは検証されますが、@ Vlaueは検証されません。
  • 緩いバインディングとは:値に@ConfigurationPropertiesを使用する場合、last-nameとlastNameは同じです。
  • spEl:#{12 * 5} {}内で計算

シナリオの選択/使用方法:
@ValueはMapなどの複雑なデータ型のカプセル化をサポートしていないため、通常のデータ型を取得するには@Valueを使用することをお勧めします。
ただし、言うまでもなく、通信するjavaBeanを特別に作成しました。構成ファイルマッピングには、
もちろん@ConfigurationPropertiesを直接使用しますが、組み合わせて使用​​することもできます。

  • @PropertySourceアノテーションの使用

@ConfigurationProperties(prefix = "person")は、デフォルトでグローバル構成ファイルから値を取得します。他の構成ファイルに無関係な情報を書き込む必要がある場合があります。このとき、構成ファイルの場所を指定する必要があります。
@PropertySourceアノテーションを使用して、構成ファイルの場所を指定します

  • @ImportResource:Spring構成ファイルをインポートして、構成ファイルの内容を有効にします。
    SpringBootにはSpring構成ファイルがありません。これらの構成ファイルの内容を有効にしたい場合があります。
    @ImportResourceアノテーションを使用するだけです。
//导入Spring的配置文件让其生效
@ImportResource(locations = {
    
    "classpsth:beans.xml"})
  • SpringBootは、コンポーネントをコンテナに追加する方法を推奨しています

完全な注釈を使用し、Javaコードを使用して構成します。

@Configurationアノテーションは、それを構成クラスとして識別します。
@ Beanを使用して、コンポーネントをコンテナーに追加します

  • @Beanタグの役割:メソッドの戻り値をコンテナーに追加します。コンテナー内のこのコンポーネントのデフォルトIDはメソッド名です。
@Configuration
public class MyConfig{
    
    
	@Bean
	public HelloService helloService01(){
    
    
		System.out.println("配置类@Bean给容器中添加组件了...");
		return new HelloService();
	}
}
//组件名默认是方法名
  • 構成ファイルのプレースホルダーを使用して、以前に構成された値を取得します(使用できない場合)。デフォルト値を指定します。
  • 乱数を使用してデフォルト値を生成することもできます
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_43941676/article/details/108569369