yaml:
yaml是json的超集,用于指定分层配置的便捷格式。
Spring支持YAML使用了SnakeYAML的解析实现。
如果SnakeYAML配置在类路径,SpringApplication类自动支持yaml配置。
如使用Starters模式,它在spring-boot-starter的依赖里。
<dependency>
<groupId>org.yamlgroupId>
<artifactId>snakeyamlartifactId>
<version>1.23version>
<scope>runtimescope>
dependency>
SnakeYAML仓库地址:
https://bitbucket.org/asomov/snakeyaml/wiki/Home
下面开始介绍YAML用法
yaml注释:
#这是一行注释
读取YAML配置:
spring框架提供了两个读取yaml文件的配置类:
environments:
dev:
url: https://dev.example.com
name: Developer Setup
prod:
url: https://another.example.com
name: My Cool App
上面配置会转换成以下格式
environments.dev.url=https://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=https://another.example.com
environments.prod.name=My Cool App
yaml列表使用如下:
my:
servers:
- dev.example.com
- another.example.com
会转换成:
my.servers[0]=dev.example.com
my.servers[1]=another.example.com
上述列表类型配置文件可以通过spring的Binder工具类(@ConfigurationProperties)应用到配置类上。
类对应成员变量需要提供一个List或Set类型的对象(有setter方法或提供一个可变的初始化值),如下。
@Configuration
@ConfigurationProperties(prefix = "my")
public class Config {
private List<String> servers = new ArrayList<String>();
public List<String> getServers() {
return this.servers;
}
}
spring会把YAML转成properties设置在spring环境中,可以通过@Value注解访问。
my:
tests: this is a test
@Value("${my.tests}")
private String servers;
可以指定多个配置在一个文件里,使用spring.profile指明使用哪个。
targetAddr:
address: 192.168.1.100
---
spring:
profiles: development
targetAddr:
address: 127.0.0.1
---
spring:
profiles: production & eu-central
targetAddr:
address: 192.168.1.120
上面的配置文件,如果profiles为development,address为127.0.0.1。 如果profiles为production和eu-central,address为192.168.1.120。 如果都没匹配上,address为192.168.1.100。
可以同时指定多个激活配置。通过逗号分隔。都满足才启用。
spring:
profiles:
active: production,eu-central
配置文件还可以通过表达式来表示。如 production & (eu-central | eu-west),表示同时满足 production eu-central 或者 production eu-west。
参考文档:https://docs.spring.io/spring/docs/5.1.9.RELEASE/spring-framework-reference/core.html#beans-definition-profiles
如果没有显式的声明任何激活配置,默认配置将会生效,default。
server:
port: 8000
---
spring:
profiles: default
security:
user:
password: weak
此外,如果没匹配上任何配置,以下配置如果必要,会在所有环境都复制一份。公共配置。
server:
port: 8000
spring:
security:
user:
password: weak
YAML缺点:
server:
port: 8000
---
spring:
profiles: !test
security:
user:
password: weak