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: 南京
结果: