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的配置。
比如我们可以建立如下配置文件:
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
#添加需要的配置