1.YAML

Springboot除了支持properties的配置,还支持yaml,而且企业中也是用的最多的。
1.1. YAML 是什么
YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
1.2 原则与语法
原则:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
  • 使用#表示注释
  • 字符串可以不用引号标注

语法:

  • map,散列表
    使用冒号:表示键值对,同一缩进的所有键值对属于一个map,示例:
age : 12
name : zhang

#对应的Json表示
{‘age':12,'name':'zhang'}
  • list,数组
    使用连字符(-)表示:
- a
- b
- 12
#对应的Json表示
['a','b',12]
  • 相互嵌套
- 
	id: 1
	name: zhang
-
	id: 2
	name: liu
#对应的Json表示
[{id: 1,name: 'zhang'},{id: 2,name: 'liu'}]

1.3 使用场景

  • 脚本语言
    由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 。除了Java 和 Go,其他都是脚本语言。
  • 序列化
    YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
  • 配置文件
    YAML做配置文件也不错。写YAML要比写XML快得多(无需关注标签或引号),并且比ini文档功能更强。
    比如Ruby on Rails的配置就选用的YAML。对ROR而言,这很自然,也很省事.
    由于兼容性问题,不同语言间的数据流转建议不要用YAML.

1.4 与XML比较
(1)安全性
YAML是纯粹用来表达资料的语言,所以内部不会存代码注入的可执行命令。这代表剖析器会相当(至少)安全的解析文件,而不用担心潜在与执行命令相关的安全漏洞。举例来说,JSON是JavaScript的子集,使用JavaScript本身的剖析器是相当诱人的,不过也造成许多代码注入的漏洞。虽然在所有资料序列语言中,安全解析本质上是可能的,但可执行性却正是这样一个恶名昭彰的缺陷;而YAML缺乏相关的命令语言,可能相对安全。

2.SpringBoot多环境

Spring官方建议使用yaml文件做配置文件,在实际项目中,我们会有多个环境例如:开发,准生产,生产,测试,产品等。

Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只在特定的环境下生效。

2.1 多环境

我们在主配置文件编写的时候,文件名可以是 application-{profile}.yml

默认使用application.yml的配置。

比如我们可以建立如下配置文件:

springboot 语音转文字_YAML


application-dev.yml 开发环境

application-prod.yml 生产环境

application-test.yml 测试环境

要使用开发环境,则在application.yml中使用spring.profiles.active激活dev环境即可:

application.yml

spring:
  profiles:
    active: dev

application-dev.yml

server:
  port: 8080
#添加需要的配置