• SpringBoot配置文件之Yml语法


    一 使用 YAML 而不是 Properties

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

    如果使用“Starters”,则spring-boot-starter会自动提供 SnakeYAML。

    1.1、加载 YAML

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

    对于 example,请考虑以下 YAML 文档:

    environments:
        dev:
            url: http://dev.example.com
            name: Developer Setup
        prod:
            url: http://another.example.com
            name: My Cool App

    前面的 example 将转换为以下 properties:

    environments.dev.url=http://dev.example.com
    environments.dev.name=Developer Setup
    environments.prod.url=http://another.example.com
    environments.prod.name=My Cool App

    YAML lists 用dereferencers 表示为 property 键。例如,请考虑以下 YAML:

    my:
    servers:
        - dev.example.com
        - another.example.com

    前面的 example 将转换为这些 properties:

    my.servers[0]=dev.example.com
    my.servers[1]=another.example.com

    要使用 Spring Boot 的Binder实用程序(这是@ConfigurationProperties所做的)绑定到 properties,你需要在java.util.List(或Set)类型的目标 bean 中有一个 property,你需要提供一个 setter 或者用一个 setter 初始化它。可变值。对于 example,以下 example 绑定到前面显示的 properties:

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

    1.2、在 Spring 环境中将 YAML 公开为 Properties

    YamlPropertySourceLoader class 可用于在 Spring Environment中将 YAML 公开为PropertySource。这样做可以使用@Value annotation 和占位符语法来访问 YAML properties。

    1.3、YAML 文件

    您可以使用spring.profiles key 在单个文件中指定多个 profile-specific YAML 文档,以指示文档何时适用,如下面的示例所示:

    server:
        address: 192.168.1.100
    ---
    spring:
        profiles: development
    server:
        address: 127.0.0.1
    ---
    spring:
        profiles: production & eu-central
    server:
        address: 192.168.1.120

    在前面的 example 中,如果development profile 是 active,则server.address property 是127.0.0.1。同样,如果production eu-central profiles 是 active,则server.address property 是192.168.1.120。如果未启用developmentproductioneu-central profiles,则 property 的 value 为192.168.1.100

    因此,spring.profiles可以包含一个简单的 profile name(用于 example production)或 profile 表达式。对于 example production & (eu-central | eu-west),profile 表达式允许表达更复杂的 profile 逻辑。检查参考指南以获取更多详细信息。

    如果 application context 启动时 none 显式为 active,则会激活默认的 profiles。因此,在下面的 YAML 中,我们在“默认”profile 中为spring.security.user.password设置了一个只有的值:

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

    然而,在下面的示例中,始终设置密码,因为它没有附加到任何 profile,并且必须在必要时在所有其他 profiles 中显式重置:

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

    使用spring.profiles元素指定的 Spring profiles 可以选择使用!字符否定。如果为单个文档指定了否定和 non-negated profiles,则至少一个 non-negated profile 必须 match,并且没有否定 profiles 可能 match。

    1.4、YAML 缺点

    无法使用@PropertySource annotation 加载 YAML files。因此,如果您需要以这种方式加载值,则需要使用 properties 文件。

    二 YAML语法:

    2.1、基本语法

    k:(空格)v:表示一对键值对(空格必须有);

    空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

    server:
        port: 8081
        path: /hello

    属性和值也是大小写敏感;

     

    2.2、值的写法

    字面量:普通的值(数字,字符串,布尔)

    k: v:字面直接来写;

    字符串默认不用加上单引号或者双引号;

    "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

    name: "zhangsan lisi":输出;zhangsan 换行 lisi

    '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

    name: ‘zhangsan lisi’:输出;zhangsan lisi

     

    对象、Map(属性和值)(键值对):

    k: v:在下一行来写对象的属性和值的关系;注意缩进

    对象还是k: v的方式

    friends:
    lastName: zhangsan
    age: 20

    行内写法:

    friends: {lastName: zhangsan,age: 18}

     

    数组(List、Set):

    用- 值表示数组中的一个元素

    pets:
    - cat
    - dog
    - pig

    行内写法

    pets: [cat,dog,pig]

     

  • 相关阅读:
    SPU和SKU有什么区别
    Mave手动安装jar包
    maven国内镜像(国内oschina的maven服务器关了)
    用java代码将从数据库中取出的具有父子关系的数据转成json格式
    Oracle中的decode()函数
    Oracle中的instr()函数
    Oracle的nvl
    Oracle保留小数点后两位的几种方法
    【Python】djangorestframework 基于django框架的接口开发
    【MySQL】 GTID使用
  • 原文地址:https://www.cnblogs.com/dalianpai/p/11772301.html
Copyright © 2020-2023  润新知