springboot 中文文件名保存_YAML


英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-external-config.html#boot-features-external-configGitHub:https:///jijicai/Spring/tree/master/spring-boot

24.7、使用 YAML 代替 Properties

YAML 是 JSON 的超集,因此,它是一种用于指定分层配置数据的便捷格式。只要类路径上有 Snake YAML 库,SpringApplication 类就会自动支持 YAML 作为 properties 的替代者。

注释:如果你使用“Starters”,Snake YAML 将由 spring.boot.starter 自动提供。

24.7.1、加载 YAML

Spring Framework 提供了两个方便的类,可用于加载 YAML 文档。YamlPropertiesFactoryBean 将 YAML 加载为 Properties,YamlMapFactoryBean 将 YAML 加载为 Map。

例如,考虑下面的 YAML 文档:


springboot 中文文件名保存_springboot 中文文件名保存_02


environments:    dev:        url: https://        name: Developer Setup    prod:        url: https://        name: My Cool App

前面的示例将转换为以下属性:


springboot 中文文件名保存_spring_03


environments.dev.url=https://environments.dev.name=Developer Setupenvironments.prod.url=https://environments.prod.name=My Cool App

YAML 列表用带有 [index] 取消引用(dereferencers)的属性键表示。例如,考虑以下 YAML:


springboot 中文文件名保存_springboot 中文文件名保存_04


my:servers:    -     - 

前面的示例将转换为这些属性:


springboot 中文文件名保存_YAML_05


my.servers[0]=my.servers[1]=

要通过使用 Spring Boot 的 Binder 工具类(这就是 @ConfigurationProperties 所做的)绑定到类似的属性,需要在目标 bean 中有一个 java.util.List(或 Set) 类型的属性,并且需要提供 setter 或使用可变值初始化它。例如,下面的示例绑定到前面显示的属性:


springboot 中文文件名保存_springboot 中文文件名保存_06


@ConfigurationProperties(prefix="my")public class Config {    private List servers = new ArrayList();    public List getServers() {        return this.servers;    }}

24.7.2、在 Spring 环境中将 YAML 作为属性公开

YamlPropertySourceLoader 类可用于在 Spring Environment 中将 YAML 公开为 PropertySource。这样就可以使用带有占位符语法的 @Value 注解来访问 YAML 属性。

24.7.3、多配置的 YAML 文档

通过使用 spring.profiles 键指示文档何时应用,可以在单个文件中指定多个特定配置的 YAML 文档,如下面示例所示:


springboot 中文文件名保存_spring_07


server:    address: 192.168.1.100---spring:    profiles: developmentserver:    address: 127.0.0.1---spring:    profiles: production & eu-centralserver:    address: 192.168.1.120

在上面的例子中,如果激活 development 配置,则 server.address 属性是 127.0.0.1。类似地,如果激活 production 和 eu-central 配置,则 server.address 属性是 192.168.1.120。如果未启用 development、production 和 eu-central 配置,那么该属性值是 192.168.1.100。

注释:因此,spring.profiles 可以包含一个简单的配置文件名(例如:production)或配置文件表达式。profile 表达式允许表达更复杂的 profile 逻辑,例如:production & (eu-central|eu-west)。请查看参考指南了解更多详细信息。(https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/core.html#beans-definition-profiles-java )

如果应用程序上下文启动时没有显示激活配置文件,则将激活默认的。因此,在下面的 YAML 中,我们为 spring.security.user.password 设置一个值,它仅在“默认”配置文件中可用:


springboot 中文文件名保存_spring security中文文档_08


server:  port: 8000---spring:  profiles: default  security:    user:      password: weak

但是,在下面的示例中,始终设置密码,因为它没有附加到任何配置文件,并且必须在所有其他配置文件中根据需要显式重置密码:


springboot 中文文件名保存_spring_09


server:  port: 8000spring:  security:    user:      password: weak

通过使用 spring.profiles 元素指定的 Spring 配置文件可以通过使用“!”字符取反。如果为单个文档同时指定了否定配置文件和非否定配置文件,则必须至少有一个非否定配置文件匹配,并且不能有否定配置文件匹配。

24.7.4、YAML 的缺点

无法使用 @PropertySource 注解加载 YAML 文件。因此,如果需要以这种方式加载值,则需要使用属性文件。

在特定配置的 YAML 文件中使用多个 YAML 文档语法可能会导致意外行为。例如,在名为 application-dev.yml 的文件中考虑以下配置,其中 dev 配置文件处于活动状态:


springboot 中文文件名保存_springboot 中文文件名保存_10


server:  port: 8000---spring:  profiles: !test  security:    user:      password: weak

在上面的例子中,profile 否定和 profile 表达式的行为将不符合预期。我们建议你不要将特定配置的 YAML 文件和多个 YAML 文档组合在一起,而只使用其中的一个。