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 + '}'; } }
注意一:导入配置文件处理器,编写配置文件就有提示
<!-- 导入文件处理器,文件进行绑定时就会有提示 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
注意二:
支持松散语法绑定
-------------------------------------以上是application.yml文件的配置信息-------------------------------------
application.properties 配置文件:
注意:配置 *.properties文件编码格式,采用UTF-8,不然出现乱码,下面是设置编码:
感谢--尚硅谷 |