解析SpringBoot中配置文件(.yml/.yaml)
springBoot配置文件的加载有先后顺序为:
1.application.yml
2.application.yaml
3.application.properoties
后加载的会把先加载的给覆盖掉
#普通数据的配置
#注意:冒号之后一定要有空格
name: zhangsan
#对象的配置
#注意:yml文件是通过空格来区分层级关系的,同一层级的位置一定要对应
person:
name: zhangsan
age: 18
addr: beijing
#行内对象的配置,行内对象的配置冒号后也要有空格
person: {name: zhangsan,age: 18.addr: beijing}
#配置数据、集合(配置普通字符串),记得中间加空格
city:
- beijing
- tianjin
- shanghai
- chongqing
#或者是行内配置
city: [beijing,tianjin,shanghai,chongqing]
#配置对象数据,一个 - 代表一个对象
person:
- name: tom
age: 18
addr: beijing
- name: lucy
age: 17
addr: shanghai
#或者是行内配置
person: [{name: tom,age: 18,addr: beijing},{name: lucy,age: 17,addr: shanghai}]
#配置Map集合
map:
key1: value1
key2: value2
如何获取yml中的配置信息:
1.通过@Value注解进行获取
优点:可以精确找到配置
缺点:如果层级太深,编写比较繁琐
@RestController
public class Demo2Controller {
@Value("${name}")
private String name;
@Value("${person.addr}")
private String addr;
@RequestMapping("/getMsg")
public String getMsg(){
return "name:"+name+" "+"addr:"+addr;
}
}
2.通过@ConfigurationProperties编写配置类进行注入
@ConfigurationProperties(prefix = "person")
@Component
public class Config {
private String name;
private String addr;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
获取配置文件的信息:
@RestController
public class Demo3Controller {
@Autowired
private Config config;
@RequestMapping("/getMsg1")
public String getMsg(){
String name = config.getName();
String addr = config.getAddr();
return "name:"+name+" "+"addr:"+addr;
}
}
可以看到Config配置文件上方会报错:
此报错信息说明程序中缺少执行器,不会影响程序的运行,但是可以研究一下
点开之后会发现:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
添加该依赖之后,是为了方便在.yml中编写配置文件的时候会有提示,提高效率的