相关介绍:
SpringBoot支持一种以.yml后缀结尾的配置文件SpringBoot启动时也会默认加载application.yml配置文件。.propertie和.yml配置文件同时存在时,SpringBoot会优先加载.yml(SpringBoot会把.yml转化为.properties文件)
.yml文件是YAML 语言编写的。YAML 是专门用来写配置文件的语言,非常简洁和强大
快速入门:
application.yml
ymlEntity:
#String 等价于properties中:ymlEntity.simpleTypeProp=simpleDataType
simpleTypeProp: simpleDataType
#数组
arrayTypeProp: 1,2,3,4,5,6,7,8
#集合类型:List
listTypeProp:
- oneData
- twoData
- threeData
#集合类型:Map
mapTypeProp:
key1: value1
key2: value2
key3: value3
#复杂类型:List<Map>
ListMapProp:
- id: 123456
name: zjh
- age: 18
addr: 海淀
#支持变量引用:
- param: "${ymlEntity.simpleTypeProp},${ymlEntity.simpleTypeProp}"
student: {id: 12345, name: zjhTest,age: ~}
YmlEntity类引用配置项属性值:因为是通过Get/Set方法把配置项给对应对象属性赋值,所以必须生成Set/Get方法。
1、 key: value 中间的空格不可少。
2、 使用缩进表示层级关系
3、 缩进时不允许使用Tab键,只允许使用空格。
4、 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
5、 # 表示注释,从这个字符一直到行尾,都会被解析器忽略。
6、 使用变量时”${ymlEntity.simpleTypeProp}”
7、 ~代表NULL
8、 字符串value之中包含空格或特殊字符,需要放在引号之中。
9、 单引号和双引号都可以使用,双引号不会对特殊字符转义。
public class Student {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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 "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
@Component
@ConfigurationProperties(prefix="ymlEntity")
public class YmlEntity {
//@Value("${ymlEntity.simpleTypeProp}")
private String simpleTypeProp;
//@Value("${ymlEntity.arrayTypeProp}")
private String [] arrayTypeProp;
//@Value("${ymlEntity.listTypeProp}")
private List<String> listTypeProp;
//@Value("${ymlEntity.mapTypeProp}")
private Map<String,String> mapTypeProp;
//@Value("${ymlEntity.ListMapProp}")
private List<Map<String,String>> ListMapProp;
//@Value("${ymlEntity.student}")
private Student student;
public void setSimpleTypeProp(String simpleTypeProp) {
this.simpleTypeProp = simpleTypeProp;
}
public void setArrayTypeProp(String[] arrayTypeProp) {
this.arrayTypeProp = arrayTypeProp;
}
public void setListTypeProp(List<String> listTypeProp) {
this.listTypeProp = listTypeProp;
}
public void setMapTypeProp(Map<String, String> mapTypeProp) {
this.mapTypeProp = mapTypeProp;
}
public void setListMapProp(List<Map<String, String>> listMapProp) {
ListMapProp = listMapProp;
}
public String getSimpleTypeProp() {
return simpleTypeProp;
}
public String[] getArrayTypeProp() {
return arrayTypeProp;
}
public List<String> getListTypeProp() {
return listTypeProp;
}
public Map<String, String> getMapTypeProp() {
return mapTypeProp;
}
public List<Map<String, String>> getListMapProp() {
return ListMapProp;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
@Value测试失败。@Value注解不支持.yml
@ConfigurationProperties(prefix=”ymlEntity”)注解在创建Bean时会把该前缀的配置项与属性值一一对应赋值。需要添加Maven依赖:
<!-- 支持 @ConfigurationProperties 注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
DemoApplicationTests
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
private YmlEntity ymlEntity;
@Test
public void contextLoads() {
System.out.println("ymlEntity.simpleTypeProp:"+ymlEntity.getSimpleTypeProp());
System.out.println("ymlEntity.arrayTypeProp:"+ JSON.toJSONString(ymlEntity.getArrayTypeProp()));
System.out.println("ymlEntity.listTypeProp:"+ymlEntity.getListTypeProp());
System.out.println("ymlEntity.mapTypeProp:"+ymlEntity.getMapTypeProp());
System.out.println("ymlEntity.ListMapProp:"+ymlEntity.getListMapProp());
System.out.println("ymlEntity.student:"+ymlEntity.getStudent().toString());
}
}