Spring Boot 配置文件、加载顺序、配置原理
1、配置文件
Spring Boot 使用一个全局的配置文件,配置文件名是固定的。
配置文件作用:修改 Spring Boot 自动配置的默认值;Spring Boot 在底层都给我们自动配置好默认值,如果想修改默认值,比如:
说说 application.yml 和 application.properties 两个文件的优先级。
1)、application.properties
2)、application.yml
.yml是YAML(YAML Ain't Markup Language)语言的文件,这种语言以数据做为中心,而不是以置标语言为重点。 它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。比json、xml等更适合做配置文件。
yml基本语法,如下图:
k: v: 表示一对键值对(k: (空格)v 这个空格是必须有的)
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的。属性和值是大小写敏感的
server:
port:8081
path:/hello
address:
值的写法:
字面量:普通的值(数字、字符串、布尔)
k: v: 字面值直接写
字符串默认不用加上单引号或双引号;如果加上单引号或双引号,具有特殊意义:
"":双引号 不会转义字符串里面的特殊字符,特殊字符串会作为本身想表示的意思
比如:name: "zhang san \n lisi" 输出:zhang san 换行 lisi
'':单引号 会转义特殊字符,特殊字符最终只会是一个普通的字符串输出
比如:name: 'zhang san \n lisi' 输出:zhang san \n lisi
对象、Map(属性和值)(键值对):
k: v:
对象还是k: v的方式,比如 user对象:
user:
name: zhangsan
age: 18
user: {name: zhangsan, age: 18} // 行内写法
数组(List、Set):
用-值表示数组中的一个元素
pets:
- cat
- dog
- pig
pets: [cat, dog, pig] // 行内写法
代码事例:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 将配置文件中的每一个属性值,映射到这个组件中
* @ConfigurationProperties(prefix = "user")
* 1、ConfigurationProperties注解:告诉SpringBoot将该类中的属性和配置文件中相关属性一一进行绑定
* 2、prefix = "user":告诉配置文件和哪个下面的属性进行一一映射
* 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
*/
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String uname;
private Integer age;
private Boolean states;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Boolean getStates() {
return states;
}
public void setStates(Boolean states) {
this.states = states;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "User{" +
"uname='" + uname + '\'' +
", age=" + age +
", states=" + states +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
}
public class Dog {
private String name;
private Integer age;
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 "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/4d081f3eefcd4b7b18863c9b7bcf84a6.png)
注意一:导入配置文件处理器,编写配置文件就有提示
<!-- 导入文件处理器,文件进行绑定时就会有提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
![](https://i-blog.csdnimg.cn/blog_migrate/d6b24b8d9cabcb5532bdce44277f546a.png)
注意二:
支持松散语法绑定
-------------------------------------以上是application.yml文件的配置信息-------------------------------------
application.properties 配置文件:
注意:配置 *.properties文件编码格式,采用UTF-8,不然出现乱码,下面是设置编码:
感谢--尚硅谷 |