一·概述
- YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。
- 在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
- 这种语言以数据做为中心,而不是以标记语言为重点!
1.1 XML&YAML/YML
- XML&YAML都是spring boot使用的一个全局的配置文件,配置文件名称是固定的。
- 作用【在spring boot中】:修改spring boot的默认配置。
<server>
<port>8081<port>
server>
//语法结构 : key=value
server:
prot: 8080
//语法结构 :key:空格 value
1.2 基础·语法
- 语法严格
- 键值对之间的空格不可以省略。
- 属性和值的大小写都是敏感的
- 使用缩进来控制层级关系,只要是左边对齐的一列数据都是同一个级别的
1.2.1 字面量·格式
- 字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
k: v
- 注意:
- “”双引号,里面的特殊字符不会被转义。如“\n”仍然表示换行
- ‘’单引号,会转义特殊字符,特殊字符最终会变成和普通字符一样输出。
1.2.2 对象&Map·格式
k:
v1:
v2:
k:{v1:xxx,v2:xxx}
1.2.3 数组·(List/set)
k:
- x
- y
- z
k:[xxx,xxx,xxx]
二·YAML注入配置文件
- yaml文件更强大的地方在于,可以给实体类直接注入匹配值
- 举例:
- 首先在实体类中注册组件
@Component
@ConfigurationProperties(prefix = "person")
- 导入依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<optional>trueoptional>
dependency>
- 在YAML中配置
k:
v1:
v2:
v3:
v4:
2.1 YAML·占位符
person:
name: qinjiang${random.uuid}
age: ${random.int}
dog:
name: ${person.name:other}_旺财
三·加载指定配置文件
- @PropertySource :加载指定的配置文件;
- @configurationProperties:默认从全局配置文件中获取值;
@PropertySource(value = "classpath:xxx.properties")
3.1 value·注入方式
- 【注意】properties配置文件在写中文的时候,会有乱码 , 我们需要去IDEA中设置编码格式为UTF-8;
settings–>FileEncodings 中配置; - 如下:
@Component
@PropertySource(value = "classpath:user.properties")
public class User {
@Value("${user.name}")
private String name;
@Value("#{9*2}")
private int age;
@Value("男")
private String sex;
}
user1.name=kuangshen
user1.age=18
user1.sex=男
四·多环境切换
- profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境;
4.1 多文件方式
- 文件名可以是 application-{profile}.properties
- 例如:application-test.properties 代表测试环境配置 application-dev.properties 代表开发环境配置
- 但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件
#比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;
#我们启动SpringBoot,就可以看到已经切换到dev下的配置了;
spring.profiles.active=dev
4.2 YAML【多文档块方式】
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod
- 注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配
置文件的!
五·配置文件的加载优先级
- springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的
默认配置文件 - 优先级1:项目路径下的config文件夹配置文件
- 优先级2:项目路径下配置文件
- 优先级3:资源路径下的config文件夹配置文件
- 优先级4:资源路径下配置文件
- 优先级由高到底,高优先级的配置会覆盖低优先级的配置