-
概述: 一种流行且方便的配置文件格式
-
语法规范:
- 支持多组织结构
- 用 — 标识一个组织结构的开始, 用 … 标识组织结构的结束(可选)
- 当个组织结构可以不用 —
- 支持注释
- 注释符号 #
- 大小写敏感
- 使用空格缩进(不能使用tab)
- 空格缩进只要是左对齐, 就是同一层级
- 字符串可以不用引号(如果内容有空格需要引号)
- 支持多组织结构
-
3中结构组成
-
标量
-
相当于数据类型
-
数据类型的约定(值)
-
integer: 12345 # 整数标准形式 octal: 0o34 # 八进制表示,第二个是字母 o hex: 0xFF # 十六进制表示 float: 1.23e+3 # 浮点数 fixed: 13.67 # 固定小数 minmin: -.inf # 表示负无穷 notNumber: .NaN # 无效数字 null: # 空值 boolean: [true, false] # 布尔值 string: '12345' # 字符串 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.
-
-
-
序列
- 相当于数组或集合列表
- 2种表示
- - 加上一个空格 表示单个列表项
- - blue
- - red
- - green
- [] 表示所有项
- [blue, red, green]
- - 加上一个空格 表示单个列表项
-
键值对
-
相当于Map
-
使用 : 加上空格表示单个键值对
- name: xyb
-
使用{}表示一个键值表
- items: {no: 1234, descript: cpu, price: ¥800.00}
-
"? " 问号+空格表示复杂的键
-
当键是一个列表或键值表时,就需要使用本符号来标记
-
# 使用一个列表作为键 ? [blue, reg, green]: Color # 等价于 ? - blue - reg - gree : Color
-
-
-
其他
-
锚点与引用,定义数据的复用
-
第一步:使用 “&” 定义数据锚点(即要复制的数据)
-
第二步:使用 “*” 引用上述锚点数据(即数据的复制目的地)
-
--- hr: - Mark McGwire # Following node labeled SS - &SS Sammy Sosa # 定义要复制的数据 rbi: - *SS # Subsequent occurrence 这里是数据复制目标 - Ken Griffey 详尽语法见官网:http://www.yaml.org/spec/1.2/spec.html
-
-
-
-
application.yml
-
语法格式:
- 支持内部用${} ognl
- 缩进 加 : (类似于python格式)
-
常用元素:(约定大于配置大于代码原则)
-
profiles 支持不同版本不同配置, 如测试, 准生产, 灰度, 生产
-
spring: application: name: cms-discovery-eureka-ha # yml配置文件之连接符(---)的使用 --- spring: profiles: peer1 server: port: 9092 eureka: instance: hostname: peer1 client: serviceUrl: defaultZone: http://peer2:9093/eureka/ --- spring: profiles: peer2 server: port: 9093 eureka: instance: hostname: peer2 client: serviceUrl: defaultZone: http://peer1:9092/eureka/ #使用方式:假如生成的包名为 cms-eureka-ha.jar #java -jar cms-eureka-ha.jar --spring.profiles.active=peer1 #java -jar cms-eureka-ha.jar --spring.profiles.active=peer2 #通过spring.profiles.active指定使用哪个profile启动。
```yml server: port: 8001 profiles: test ## 指定配置文件的环境 spring: application: name: cloud-payment-service datasource: type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包 url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 ``` -
-
-
配置文件加载顺序
- 这是为什么可以让配置文件外部化的原因
- 1.在命令行中传入的参数 > 外部配置文件 > 内部配置文件(自行百度)



