1.概念
在Springboot的项目中,配置文件有以下几种格式:
- Application.properties
- Application.yaml
- Application.yml
其中官方推荐我们使用yaml的格式(因为能表示的数据类型很多样)
2.基本语法
# yaml形式的配置文件
# 普通的key-value(分号之后有空格)
name: sun
# 对象类型
student:
name: sun
age: 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;
}
@Override
public 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;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
}
springboot的测试类:
@SpringBootTest
class SpringbootWebQuickstartApplicationTests {
@Autowired
Address address;
@Test
void contextLoads() {
System.out.println(address);
}
}
结果:
使用yaml配置文件格式来进行属性赋值,如下:
application.yaml:
user:
name: java
age: 20
address:
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: 南京
结果: