• SpringBoot第三篇:配置文件详解二


    作者:追梦1819
    原文:https://www.cnblogs.com/yanfei1819/p/10615605.html
    版权声明:本文为博主原创文章,转载请附上博文链接!


    ## 前言

      本文主要讲 yaml 文件。

      传统的配置文件有 .xml、.properties、.json 等格式的文件。yaml 文件想对于传统的文件来说,减少很多不必要的标签或者括号,阅读也更加清晰简单。SpringBoot 官方推荐的配置文件,除了 .properties ,还有 yaml 。


    概述

      yaml 文件其实与properties 文件差别不大,主要是层次结构更加明显,阅读性更强。

      以下是百度百科的解释:

      YAML 是 YAML 不是一种标记语言的外语缩写;但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。

      它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。


    语法

    • 大小写敏感;
    • 使用缩进表示层级关系;
    • 禁止使用 tab 缩进,只能使用空格键 , 建议使用两个空格;
    • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
    • # 表示注释,从这个字符一直到行尾,都会被解析器忽略;
    • 字符串可以不用引号,也可以使用单引号或者双引号。

    数据结构

    • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    • 纯量(scalars):单个的、不可再分的值

    实例

    注意:

    • 使用冒号:表示键值对, 冒号后面需要有一个空格, key需要顶格写,前面不能有空格 同一缩进的所有键值对属于一个map;
    • 在一个文件中,可同时包含多个文件,并"---"分隔;
    • 选择性的符号"..."可以用来表示文件结尾.
    1. 对象:

      单个值:

      name: demo
      

      对象:

      person:
        name: yaml
        age: 23
      

      或者为:

      person: {name: 'yaml', age: 26}
      
    2. 数组

      fruit:
        - apple
        - orange
      
      fruit: ['apple', 'orange']
      
      teacher:
        - studentA
        - studentB
        - 
           - bookA
           - bookB
      

      等同:

      teacher: ['studentA', 'studentB',['bookA', 'bookB']]
      

      注意:

      当键是数组或者对象时需要使用问号来标记

      ?[blue, reg, green]: xxx
      ?{a:xx, b:xx}: xx
      
    3. 复合结构

        数据和对象可以组合使用。

    4. 纯量

        纯量是最基本的、不可再分的值。

      • 字符串

      • 布尔值

      • 整数

      • 浮点数

      • Null

      • 时间

      • 日期

    5. 字符串

        字符串是最常用的,也是比较复杂的数据类型。以下细细分析。

      # 单行字符串
      str: 这是一行字符串   # 字符串默认不使用引号表示
      str2: '内容: 字符串' # 如果字符串之中包含空格或特殊字符,需要放在引号之中
      str3: '内容
      字符串'  # 单引号和双引号都可以使用,双引号不会对特殊字符转义
      str4: "内容
      字符串"  # 双引号对特殊字符不转义
      str5: 'labor''s day' # 单引号之中如果还有单引号,需要使用单引号转义
      
      # 多行字符串(# 多行字符串(从第二行开始,必须有一个单空格缩进,换行符会被转为空格)
      str6: 这是一段  
        多行
        字符串
      str7: | # "|"表示每行末尾都跟一个换行符
        Foo
        Bar
      str8: > # “>” 最后一行跟一个换行符
        Foo
        Bar
      str9: |
        Foo
      str10: |+ # +表示保留文字块末尾的换行
        Foo
      str11: |- # -表示删除字符串末尾的换行
        Foo
      str12: | # 字符串之中可以插入 HTML 标记
       <p style="color: red">
          段落
       </p>
      
      
    6. 类型转换

        使用两个感叹号跟要转换的基本数据类型,单引号:用于转换自定义对象。

      #下面是内置类型
      #!!int               # 整数类型
      #!!float             # 浮点类型
      #!!bool              # 布尔类型
      #!!str               # 字符串类型
      #!!binary            # 也是字符串类型
      #!!timestamp         # 日期时间类型
      #!!null              # 空值
      #!!set               # 集合
      #!!omap, !!pairs     # 键值列表或对象列表
      #!!seq               # 序列,也是列表
      #!!map               # 键值表
      test: !!str 123
      
      
    7. 锚点和引用

        锚点&和别名*,可以用来引用。

       - &index1 a
       - b
       - *index1
      

    数据类型约定

      对一些常用数据类型的表示格式进行了约定,包括:

     integer: 12345     # 整数标准形式
     octal: 0o34        # 八进制表示,第二个是字母 o
     hex: 0xFF          # 十六进制表示
     
     float: 1.23e+3     # 浮点数
     fixed: 13.67       # 固定小数
     minmin: -.inf      # 表示负无穷
     notNumber: .NaN    # 无效数字
     
     null:              # 空值
     boolean: [true, false] # 布尔值
     string: '12345's    # 字符串
     
     date: 2015-08-23   # 日期
     datetime: 2015-08-23T02:02:00.1z  # 日期时间
     iso8601: 2015-08-23t21:59:43.10-05:00  # iso8601 日期格式
     spaced: 2015-08-23 21:59:43.10 -5      # ?
    

      “!”(叹号)显式指示类型,或自定义类型标识。单叹号通常是自定义类型,双叹号是内置类型

     isString: !!str 2015-08-23     # 强调是字符串不是日期数据
     picture: !!binary |            # Base64  图片
         R0lGODlhDAAMAIQAAP//9/X
         17unp5WZmZgAAAOfn515eXv
         Pz7Y6OjuDg4J+fn5OTk6enp
         56enmleECcgggoBADs=
     #下面是内置类型
     !!int               # 整数类型
     !!float             # 浮点类型
     !!bool              # 布尔类型
     !!str               # 字符串类型
     !!binary            # 也是字符串类型
     !!timestamp         # 日期时间类型
     !!null              # 空值
     !!set               # 集合
     !!omap, !!pairs     # 键值列表或对象列表
     !!seq               # 序列,也是列表
     !!map               # 键值表
     #下面是一些例子:
     --- !!omap
     - Mark: 65
     - Sammy: 63
     - Key: 58
     --- !!set           # 注意,“?”表示键为列表,在这里列表为 null
     ? Mark
     ? Sammy
     ? Key
     # 下面是自定义的类型或标识
     %TAG ! tag:clarkevans.com,2002:   # % 是指令符号
     --- !shape
     # Use the ! handle for presenting
     # tag:clarkevans.com,2002:circle
     - !circle
       center: &ORIGIN {x: 73, y: 129}
       radius: 7
     - !line
       start: *ORIGIN
       finish: { x: 89, y: 102 }
     - !label
       start: *ORIGIN
       color: 0xFFEEBB
       text: Pretty vector drawing.
    

    参考

    1. yaml 官网:https://yaml.org/spec/1.2/spec.html
    2. yaml 在线校验:http://www.bejson.com/validators/yaml/
    3. 源码:我的GitHub

    <全文完>

    本系列文章同步于公众号:【技术与人生】

  • 相关阅读:
    WPF 关于多语言 的实现 学习,利用反射中的特性
    WPF Textbox 中文输入崩溃 规避
    自定义控件.依赖项属性同步更新内部控件属性
    HexInput
    HashMap实现原理分析
    centos下nginx安装
    dos下mybatis自动生成代码
    设计模式之装饰器模式
    Java 中的悲观锁和乐观锁的实现
    redis分布式锁
  • 原文地址:https://www.cnblogs.com/yanfei1819/p/10860604.html
Copyright © 2020-2023  润新知