springboot中YAML使用二

dengjili發表於2020-12-25

知識點1,yaml檔案與properties檔案等價配置

application.yml

person:
  name: zhangsan
  age: 11

application.properties

person.name=zhagnsan
person.age=112222222

通過註解@ConfigurationProperties(prefix = “person”)繫結yaml檔案/properties檔案

知識點2,@ConfigurationProperties黃色告警取消

在這裡插入圖片描述

在pom.xml檔案中新增如下配置

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

在這裡插入圖片描述

知識點3,@Value屬性,預設值屬性

若配置檔案中未配置相關屬性,則取值為@Value屬性值,優先順序配置檔案屬性大於@Value

@Component
public class Animal {
	@Value("草泥馬")
	private String name;
	private String desc;
	// seter geter
}

此時name=草泥馬

若出現配置檔案,則值來自於配置檔案,例
application.properties

aa.name=hello

java檔案

@Component
@ConfigurationProperties(prefix = "aa")
public class Animal {
	@Value("草泥馬")
	private String name;
	private String desc;
	// seter geter
}

此時name=hello

知識點4,yaml檔案key駝峰命名的等價方式

如駝峰命名法xxxYyyZzz,可等價於xxx-yyy-zzz

application.yml

s:
  user-name: hehe

java檔案

@Component
@ConfigurationProperties(prefix = "s")
public class Student {
	private String userName;
	// seter geter
}

知識點5,@Value Spring EL表示式注入

application.yml

x:
  y:
    z: zzzz

application.properties

a.b.c=aaaaaa

java檔案

@Component
public class Animal {
	@Value("${a.b.c}")
	private String name;
	@Value("${x.y.z}")
	private String desc;
	// seter geter
}

知識點6,@ConfigurationProperties與JSR303整合

校驗屬性值是否正確

在pom.xml檔案中新增如下配置

	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-validation</artifactId>
	</dependency>
@Component
@ConfigurationProperties(prefix = "p")
@Validated
public class Person {
	@Max(100L)
	private int age
	// seter geter
}

如圖,校驗age是否超過最大值100

知識點7,@PropertySource引入非預設配置檔案

預設會載入application.properties/application.yml檔案,載入其他配置檔案需要使用註解@PropertySource可以載入其他properties檔案,不支援yml檔案


config.properties

ppp.userName=abcdefg

java檔案

@Component
@ConfigurationProperties(prefix = "ppp")
@PropertySource(value = {"classpath:config.properties"})
public class Student {
	private String userName;
	// seter geter
}

相關文章