YML简介

article/2025/1/16 12:45:31

在接触springboot的时候遇到了一种特殊的配置文件 .yml,本文对yml作简单介绍,快速入手yml。

一、YML是什么

YAML (YAML Ain't a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等。

二、YML的优点

  1. YAML易于人们阅读。
  2. YAML数据在编程语言之间是可移植的。
  3. YAML匹配敏捷语言的本机数据结构。
  4. YAML具有一致的模型来支持通用工具。
  5. YAML支持单程处理。
  6. YAML具有表现力和可扩展性。
  7. YAML易于实现和使用。

三、YML语法

1.约定

  • k: v 表示键值对关系,冒号后面必须有一个空格

  • 使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的

  • 大小写敏感

  • 缩进时不允许使用Tab键,只允许使用空格。

  • 松散表示,java中对于驼峰命名法,可用原名或使用-代替驼峰,如java中的lastName属性,在yml中使用lastName或 last-name都可正确映射。

 

2.键值关系

(以java语言为例,其它语言类似)对于键与值主要是看能否表示以下内容。普通的值(数字、字符串、布尔)、日期、对象、数组、集合等。

1) 普通值(字面量)

k: v:字面量直接写;

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

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

​ name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

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

name1: zhangsan
name2: 'zhangsan \n lisi'
name3: "zhangsan \n lisi"
age: 18
flag: true

2)日期

date: 2019/01/01

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

​ 在下一行来写对象的属性和值的关系,注意缩进

people:name: zhangsanage: 20

​ 行内写法:

people: {name:zhangsan,age: 20}

4)数组、list、set

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

pets:- dog- pig- cat

行内写法

pets: [dog,pig,cat]

5)数组对象、list对象、set对象

peoples:- name: zhangsanage: 22- name: lisiage: 20- {name: wangwu,age: 18}

6)java代码示例

java代码(省略get,set方法)

public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Dog> lists;private Dog dog;private String[] arr;
}
public class Dog {private String name;private Integer age;
}

对应的yml

person:boss: falsemaps:k1: v1k2: 14lists:- name: d1age: 2- name: d2age: 3- {name: d3,age: 4}birth: 2017/12/15dog:name: p_dogage: 15age: 13last-name: 张三arr: [s1,s2,s3]

@Value 获取值和 @ConfigurationProperties 获取值的比较:

 @ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

3.文档块

对于测试环境,预生产环境,生产环境可以使用不同的配置  [ config.dev.yml、config.prod.yml、config.test.yml]

如果只想写到一个文件中,yml与是支持的,每个块用----隔开


server:port: 8081
spring:profiles:active: prod #激活对应的文档块---
server:port: 8083
spring:profiles: dev #指定属于哪个环境---server:port: 8084
spring:profiles: prod  #指定属于哪个环境

 

 

#################################### 简单的文件 ##########################################

数据结构可以用类似大纲的缩进方式呈现

receipt:     Oz-Ware Purchase Invoice
date:        2012-08-06
customer:given:   Dorothyfamily:  Galeitems:- part_no:   A4786descrip:   Water Bucket (Filled)price:     1.47quantity:  4- part_no:   E1628descrip:   High Heeled "Ruby" Slipperssize:      8price:     133.7quantity:  1bill-to:  &id001street: | 123 Tornado AlleySuite 16city:   East Centervillestate:  KSship-to:  *id001   specialDelivery:  >Follow the Yellow BrickRoad to the Emerald City.Pay no attention to theman behind the curtain.

注意在 YAML 中,字符串不一定要用双引号标示。另外,在缩进中空白字符的数目并不是非常重要,只要相同层次结构的元素左侧对齐就可以了(不过不能使用 TAB 字符)。这个文件的顶层由七个键值组成:其中一个键值 "items",是两个元素构成的数组(或称清单),这清单中的两个元素同时也是包含了四个键值的散列表。文件中重复的部分用这个方法处理:使用锚点( &)和引用(*)标签将 "bill-to" 散列表的内容复制到 "ship-to" 散列表。也可以在文件中加入选择性的空行,以增加可读性。在一个文件中,可同时包含多个文件,并用 "---"分隔。选择性的符号"..." 可以用来表示文件结尾(在利用流的通信中,这非常有用,可以在不关闭流的情况下,发送结束信号)。

语言的构成元素

YAML 的基本组件

YAML 提供缩进/区块以及内置(inline)两种格式,来表示清单和散列表。以下展示几种 YAML 的基本原件。

清单(数组)

 

 --- # 最喜爱的电影- Casablanca- North by Northwest- Notorious

另外还有一种内置格式(inline format)可以选择──用方括号围住,并用逗号 + 空白区隔(类似 JSON 的语法)

 

 --- # 购物清单[milk, pumpkin pie, eggs, juice]

散列表

键值和数据由冒号及空白字符分开。区块形式(常使用与 YAML 数据文档中)使用缩进和换行符分隔 key: value 对。内置形式(常使用与 YAML 数据流中)在大括号中使用逗号 + 空白字符分隔 key: value 对。

 

 --- # 區塊形式name: John Smithage: 33--- # 內置形式{name: John Smith, age: 33}

区块的字符

再次强调,字符串不需要包在引号之内。有两种方法书写多行文字(multi-line strings),一种可以保存新行(使用 | 字符),另一种可以折叠新行(使用 > 字符)。

保存新行 (Newlines preserved)

 

data: |                                     # 譯者注:這是一首著名的五行民謠(limerick)There once was a man from Darjeeling     # 這裡曾有一個人來自大吉嶺Who got on a bus bound for Ealing        # 他搭上一班往伊靈的公車It said on the door                  # 門上這麼說的"Please don't spit on the floor"     # "請勿在地上吐痰"So he carefully spat on the ceiling      # 所以他小心翼翼的吐在天花板上

根据设置,前方的引领空白符号(leading white space)必须排成条状,以便和其他数据或是行为(如示例中的缩进)明显区分。

折叠新行 (Newlines folded)

 

data: >Wrapped text         # 摺疊的文字will be folded       # 將會被收into a single        # 進單一一個paragraph            # 段落Blank lines denote   # 空白的行代表paragraph breaks     # 段落之間的區隔

和保存新行不同的是,换行字符会被转换成空白字符。而引领空白字符则会被自动消去。

层次结构化的元素

于清单中使用散列表

 

- {name: John Smith, age: 33}
- name: Mary Smithage: 27

于散列表中使用清单

 

men: [John Smith, Bill Jones]
women:- Mary Smith- Susan Williams

YAML 的高级组件

这部分算是一个后续的讨论,在比较各种数数据列语言时,YAML 最常被提到的特色有两个:关系树和数据形态。

树状结构之间的交互引用

数据合并和参考

为了维持文件的简洁,并避免数据输入的错误,YAML 提供了结点参考(*)和散列合并(<<)参考到其他结点标签的锚点标记(&)。参考会将树状结构加入锚点标记的内容,并可以在所有数据结构中运作(可以参考上面 "ship-to" 的示例)合并只有散列表可以使用,可以将键值自锚点标记复制到指定的散列表中。

当数据被 instantiate 合并和参考会被剖析器自动展开。

 

#眼部雷射手術之標準程序
---
- step:  &id001                  # 定義錨點標籤 &id001instrument:      Lasik 2000pulseEnergy:     5.4pulseDuration:   12repetition:      1000spotSize:        1mm- step:<<: *id001                  # 合併鍵值:使用在錨點標籤定義的內容spotSize:       2mm         # 覆寫"spotSize"鍵值- step:<<: *id001                  # 合併鍵值:使用在錨點標籤定義的內容pulseEnergy:    500.0       # 覆寫鍵值alert: >                    # 加入其他鍵值warn patient of audible pop

数据形态

由于自动判定数据形态的功能,严格类型(也就是用户有宣告的数据形态)很难在大部分的 YAML 文件中看到。数据类型可以被区分成三大类:原码(core),定义(defined),用户定义(user-defined)。原码可以自动被解析器分析(例如:浮点数,整数,字符串,清单,映射,...)。有一些高级的数据形态──例如比特数据──在 YAML 中有被 “定义”,但不是每一种解析器都有支持。最后,YAML 支持用户自定的区域变量,包括:自定义的类别,结构或基本类型(例如:四倍精度的浮点数)。

强制转型

YAML 的自动判定数据形态是哪一种实体。但有时用户会想要将数据强制转型成自定的某种类型。最常见的状况是字符串,有时候可能看起来像数字或布尔值,这种时候可以使用双引号,或是使用严格类型标签。

 

---
a: 123                     # 整數
b: "123"                   # 字串(使用雙括號)
c: 123.0                   # 浮點數
d: !!float 123             # 浮點數,使用!!表達的嚴格型態
e: !!str 123               # 字串,使用嚴格型態
f: !!str Yes               # 字串,使用嚴格型態
g: Yes                     # 布林值"真"
h: Yes we have No bananas  # 字串(包含"Yes"和"No")

其他特殊数据形态

除了一般的数据形态之外,用户也可以使用一些较为高级的类型,但不保证可被每种解析器分析。使用时和强制转型类似,要在形态名称之前加上两个惊叹号(!!)。有几种重要的形态在本篇没有讨论,包括集合(sets),有序映照(ordered maps),时间戳记(timestamps)以及十六进制数据(hexadecimal)。下面这个示例则是比特数据(binary)

 

---
picture: !!binary |R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmleECcgggoBADs=mZmE

用户自行扩展的数据形态

许多 YAML 的实现允许用户自定义数据形态。在将一个对象序列化时,这个方法还颇方便的。某些区域数据形态可能不存在默认的数据形态中,不过这种类型在特定的 YAML 应用程序中是有定义的。这种区域数据形态用惊叹号( !)表示。

 

myObject:  !myClass { name: Joe, age: 15}

语法

在 yaml.org(英文)可以找到轻巧而好用的 小抄(亦是用 YAML 表示)及格式说明。下面的内容,是关于基本组件的摘要。

YAML 使用可打印的 Unicode 字符,可使用 UTF-8 或 UTF-16。
使用空白字符为文件缩进来表示结构;不过不能使用跳格字符 (TAB)。
注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)
每个清单成员以单行表示,并用短杠 + 空白( - )起始。或使用方括号( [ ] ),并用逗号 + 空白( , )分开成员。
每个散列表的成员用冒号 + 空白( : )分开键值和内容。或使用大括号( { } ),并用逗号 + 空白( , )分开。
散列表的键值可以用问号 ( ? ) 起始,用来明确的表示多个词汇组成的键值。
字符串平常并不使用引号,但必要的时候可以用双引号 ( " ) 或单引号 ( ' ) 框住。
使用双引号表示字符串时,可用倒斜线( \ )开始的转义字符(这跟 C 语言类似)表示特殊字符。
区块的字符串用缩进和修饰符(非必要)来和其他数据分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。
在单一文件中,可用连续三个连字号(---)区分多个文件。
另外,还有选择性的连续三个点号( ... )用来表示文件结尾。
重复的内容可使从参考标记星号 ( * ) 复制到锚点标记( & )。
指定格式可以使用两个惊叹号 ( !! ),后面接上名称。
文件中的单一文件可以使用指导指令,使用方法是百分比符号 ( % )。有两个指导指令在 YAML1.1 版中被定义:
% YAML 指导指令,用来识别文件的 YAML 版本。
% TAG 指导指令,被用在 URI 的前缀标记。这个方法在标记节点的类型时相当有用。
YAML 在使用逗号及冒号时,后面都必须接一个空白字符,所以可以在字符串或数值中自由加入分隔符号(例如:5,280 或 http://www.wikipedia.org)而不需要使用引号。

另外还有两个特殊符号在 YAML 中被保留,有可能在未来的版本被使用 --( @ )和( ` )

 


http://chatgpt.dhexx.cn/article/SG7s2jK9.shtml

相关文章

YML文件格式学习

最近的SpringBoot项目里用到yml文件作为配置文件&#xff0c;简单的了解下&#xff0c;它的基本语法如下 大小写敏感使用缩进表示层级关系缩进时不允许使用Tab键&#xff0c;只允许使用空格。缩进的空格数目不重要&#xff0c;只要相同层级的元素左侧对齐即可&#xff03; 表示…

Spring boot yml的格式

spring boot 配置文件的格式分为两种 第一种就是&#xff1a; #spring.datasource.urljdbc:sqlite:D:/demo/springboot-sqlite-master/src/main/db/myDb spring.datasource.urljdbc:sqlite:D:/demo/springboot-sqlite-master/src/main/db/myDb spring.datasource.usernameroo…

【微服务】使用yml格式进行nacos拓展配置

文章目录 前言1、properties格式配置2、yml格式配置 前言 在学习过程中接触到了在bootstrap.yml文件中对nacos的拓展配置&#xff0c;对一方面目前还不算是太熟悉&#xff0c;因此便打算在网上进行学习。 但是经过一系列搜索&#xff0c;发现网上众多都是使用的properties充当…

.json格式转为.yml格式

.json格式转为.yml格式 在跑ssd-6d代码时&#xff0c;出现了一个严重的问题&#xff0c;代码中用到的数据集里的文件都是.yml文件&#xff08;eg:camera.yml&#xff09;但是在下载的数据集&#xff08;teijani&#xff09;中也没有相应的.yml文件&#xff0c;数据及里提供的都…

Java Yml格式转换为Properties

Yml格式文件转换为Properties格式 问题引入转换代码代码解读 问题引入 使用在线的yml转换properties, 发现有属性内容漏了&#xff0c;网站地址https://tooltt.com/yaml2properties/。 于是自己动手写个转换工具类&#xff0c;自测过多个 yml 文件&#xff0c;目前没发现遗漏的…

Spring Boot配置文件yml格式详解

在Spring Boot项目中配置文件格式可以是.properties格式,也可以是yml格式,但是一般使用yml格式的比较多,yml格式都有什么语法?yml格式怎么配置?本文将详细的讲解yml的具体使用。 简介 YAML 是一种简洁的非标记语言(YAML Ain’t Markup Language),YAML以数据为中心,使用空…

连线图

电子发声单元接线图 点阵单元接线图 点阵实验接线图 连线设计图

五类直连线做法

五类直连线两头线序相同&#xff0c;都是 白橙、橙、白绿、蓝、白蓝、绿、白棕、棕 如下图所示&#xff0c;将水晶头卡扣朝下&#xff0c;插入网线后用网线钳夹紧即可。

连连看(三)

Python3 实现QQ游戏连连看游戏辅助 连连看&#xff08;零&#xff09;—— 前记连连看&#xff08;一&#xff09;—— 你看&#xff0c;这是截图啊连连看&#xff08;二&#xff09;—— 哦吼&#xff0c;PIL CV2 Numpy 假图像识别构建矩阵连连看&#xff08;三&#xff09…

连点成线

做技术和做产品都需要沉心深研。做技术侧重对物性的理解&#xff0c;突破原有限制&#xff0c;创造新的领域&#xff1b; 做产品侧重对人性的理解&#xff0c;善于使用技术&#xff0c;创造简单易用的服务。技术需要落地于产品&#xff0c;展示其威力; 产品需要新技术的引擎&am…

图解计算机基础网站上线了

大家好&#xff0c;我是小林。 就在昨天 4 点半&#xff0c;我收到了工信部的短信&#xff0c;通知了我的域名备案完成了&#xff01; 足足等待了一周&#xff0c;域名终于备案完了&#xff0c;久等了各位&#xff01;心急的小伙伴&#xff0c;可以到末尾见直接看网站域名。 …

股票K线几种线型基本规则

1.经典蜡烛图&#xff1a; K线颜色&#xff1a; 如果收盘价格 > 开盘价格则是涨色&#xff1b; 如果收盘价格 < 开盘价格则是跌色&#xff1b; 如果收盘价格 开盘价格&#xff0c;则判断收盘价格 > 昨收价格是涨色反之是跌色。 K线形状&#xff1a; 中间垂直线…

5.1、【 K线图的练习】

有经验的股民都知道K线基本功的重要性。在早些时候不依靠其他的一些量化指标&#xff0c;仅凭老股民对K线的理解&#xff0c;就可以做到不错的收益率。 各种k线组合&#xff0c;比如黄昏星、启明星&#xff0c;多方炮&#xff0c;乌云盖顶。。。几十种最基本的经典k线信号&…

如何看k线图的图解法

K线图是黄金白银投资分析的基础手段&#xff0c;我们建议大家认真理解关于k线图的基础知识&#xff0c;掌握好如何看k线图图解的方式&#xff0c;如果能将相关知识融会贯通&#xff0c;日后的投资就等于成功了一大半。   K线图直观、立体感强、信息丰富的特点&#xff0c;通过…

一步一步教你写股票走势图——K线图四(高亮联动一)

目录 一步一步教你写股票走势图——分时图一&#xff08;概述&#xff09; 一步一步教你写股票走势图——分时图二&#xff08;自定义xy轴&#xff09; 一步一步教你写股票走势图——分时图三&#xff08;对齐图表、自定义柱状图高亮&#xff09; 一步一步教你写股票走势图…

连连看(五)

Python3 实现QQ游戏连连看游戏辅助 连连看&#xff08;零&#xff09;—— 前记连连看&#xff08;一&#xff09;—— 你看&#xff0c;这是截图啊连连看&#xff08;二&#xff09;—— 哦吼&#xff0c;PIL CV2 Numpy 假图像识别构建矩阵连连看&#xff08;三&#xff09…

如何看k线图图解

K线图是贵金属投资者进行技术分析的基础手段&#xff0c;建议刚刚接触朋友认真理解关于k线图的基础知识&#xff0c;如果能掌握好K线&#xff0c;日后的学习看盘和技术分析就会容易得多。 K线图直观、立体感强&#xff0c;而且信息丰富&#xff0c;是金融投资分析中最常用和最基…

【数据结构和算法】超多图解,超详细,堆详解

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,数据结构和算法、C/C++、面试、刷题、Linux尽管咨询我,关注我,有问题私聊! 🎈 关注专栏:图解数据结构和算法 (优质好文持续更新中……)🚀 🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬 目录

图中的十字链表

转载于:https://www.cnblogs.com/qxym2016/p/7434591.html