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: 是一个标记语言、
AML isnot a Markup Language: 不是一个标记语言
标记语言
以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml
yaml配置:
server:
prot: 8080
xml配置:
<server>
<port>8081</port>
</server>
yaml基础用法:
# 普通的key-value
name: moumu
# 对象
student:
name: moumu
age: 22
# 行内写法
studentLine: {name: moumu,age: 22}
# 数组
pets:
- cat
- dog
- pig
petsLine: [cat,dog,pig]
yaml基础语法
说明:语法要求严格!
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
注入配置文件
yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!
yaml注入配置文件
1、在springboot项目中的resources目录下新建一个文件 application.yml
2、编写一个实体类 Dog;
package com.wch.springboot.pojo;
@Component //注册bean到容器中
public class Dog {
private String name;
private Integer age;
//有参无参构造、get、set方法、toString()方法
}
3、思考,我们原来是如何给bean注入属性值的!@Value,给狗狗类测试一下:
@Component //注册bean
public class Dog {
@Value("阿黄")
private String name;
@Value("18")
private Integer age;
}
4、在SpringBoot的测试类下注入狗狗输出一下;
@SpringBootTest
class Springboot02ApplicationTests {
@Autowired
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
结果成功输出,@Value注入成功,
5、我们在编写一个复杂一点的实体类:Person 类
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Data brith;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
}
6、我们来使用yaml配置的方式进行注入,大家写的时候注意区别和优势,我们编写一个yaml配置!
person:
name: moumu
age: 22
happy: true
birth: 2023/01/08
maps: {k1: v1,k2: v2}
lists:
- code
- music
- boy
dog:
name: 小黑
age: 2
7、注入类中
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Data brith;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
}
8、IDEA 提示,springboot配置注解处理器没有找到,让我们看文档,我们可以查看文档,找到一个依赖!
将这段代码复制到pom.xml中
确认以上配置都OK之后,我们去测试类中测试一下:
@SpringBootTest
class Springboot02ApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
配置文件占位符
配置文件还可以编写占位符生成随机数
person:
name: moumu${random.uuid}
age: 22
happy: true
birth: 2023/01/08
maps: {k1: v1,k2: v2}
lists:
- code
- music
- boy
dog:
name: ${person.hello:other}_小黑
age: 2