1.概念
在Springboot的項目中,配置文件有以下幾種格式:
- Application.properties
- Application.yaml
- Application.yml
其中官方推薦我們使用yaml的格式(因為能表示的數據類型很多樣)
?
2.基本語法?
# yaml形式的配置文件# 普通的key-value(分號之后有空格)
name: sun# 對象類型
student:name: sunage: 18# 對象類型的行內寫法
people: {name: sun,age: 20}# 數組
pet:- cat- dog- pig# 數組類型的行內寫法
pets: [cat,dog,pig]
3.給屬性賦值
在沒有使用yaml之前,我們給對象類型賦值有兩種方式:
- 使用構造方法/set方法
- 在Spring中交給IOC賦值
下面來展示下使用Spring的注解來賦值:?
?Address類:
@Component
public class Address {@Value("陜西")private String province;@Value("西安")private String city;public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}@Overridepublic String toString() {return "Address{" +"province='" + province + '\'' +", city='" + city + '\'' +'}';}
}
User類:?
@Component
public class User {private String name;private Integer age;private Address address;public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", address=" + address +'}';}
}
?springboot的測試類:
@SpringBootTest
class SpringbootWebQuickstartApplicationTests {@AutowiredAddress address;@Testvoid contextLoads() {System.out.println(address);}}
結果:?
使用yaml配置文件格式來進行屬性賦值,如下:?
?application.yaml:
user:name: javaage: 20address:province: 廣州city: 深圳
在User類上添加:
@ConfigurationProperties(prefix = "user")
將這個User類和指定的yaml文件綁定,并且將屬性一一對應
- 有個注意點:prefix屬性的值必須要符合規范,即首字母小寫
?4.松散綁定
上面說了,yaml文件和實體類中的屬性會一一對應,那么當兩者的屬性名不一致的時候,還能完成映射嗎?
- yaml配置文件支持松散綁定,即當實體類中的屬性名是用駝峰命名法來命名的,yaml文件中的屬性是用中劃線?"-" 或者下劃線?"_" 來命名的,這樣也能完成對應
Address實體類:
@Component
@ConfigurationProperties(prefix = "address")
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Address {private String provinceName;private String city;}
yaml文件:
address:province_name: 江蘇city: 南京
結果: