5.yaml配置文件
SpringBoot:配置文件及自动配置原理
配置文件
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
- application.properties
- 语法结构 : key=value
- application.yml
- 语法结构 :key:空格 value
配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;
YAML
YAML是 “YAML Ain’t a Markup Language” (YAML不是一种置标语言)的递归缩写。
在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种置标语言)
YAML A Markup Language :是一个标记语言
YAML isnot Markup Language :不是一个标记语言
标记语言
以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml
yaml配置:
server:
prot: 8080
xml配置:
<server>
<port>8081<port>
</server>
YAML语法
基础语法:
k:(空格) v
以此来表示一对键值对(空格不能省略);以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
注意 :属性和值的大小写都是十分敏感的。例子:
server:
port: 8081
path: /hello
值的写法
字面量:普通的值 [ 数字,布尔值,字符串 ]
k: v
字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
“” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 : name: “kuang \n shen” 输出 : kuang 换行 shen
‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 : name: ‘kuang \n shen’ 输出 : kuang \n shen
对象、Map(键值对)
k:
v1:
v2:
在下一行来写对象的属性和值得关系,注意缩进;比如:
student:
name: qinjiang
age: 3
行内写法
student: {name: qinjiang,age: 3}
数组( List、set )
用 - 值表示数组中的一个元素,比如:
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
修改SpringBoot的默认端口号
配置文件中添加,端口号的参数,就可以切换端口;
server.port=8081
注入配置文件
程序实现
1. 如果要使用properties配置文件可能导入时存在乱码现象 , 需要在IDEA中进行调整 , 我们这里直接使用yml文件 , 将默认的 application.properties后缀修改为yml
2. 导入配置文件处理器
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3.编写yml 配置文件
person:
name: qinjiang
age: 3
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 旺财
age: 1
4.在SpringBoot的主程序的同级目录下建包,只有这样,主程序才会对这些类生效 ; 我们建一个pojo的包放入我们的Person类和Dog类;
package com.kuang.springbootdemo03.pojo;
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作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//get,set方法
//toString方法
}
记得写上 toString()方法,方便调试输出结果
package com.kuang.springbootdemo03.pojo;
public class Dog {
private String name;
private Integer age;
//get、set方法
//toString()方法
}
5.确认无误后,到测试单元中进行测试,看是否注入成功!
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDemo03ApplicationTests {
@Autowired
Person person = new Person();
@Test
public void contextLoads() {
System.out.println(person);
}
}