使用yaml代替properties
这是官网的原话:Using YAML Instead of Properties
既然官方都说了,使用yaml来代替properties,证明一定有它的好处或者便捷之处
yaml是JSON的超集,因此是一种用于指定层次结构配置数据的便捷格式
从这句话看出,yaml有层次结构的,看起来容易理解,便捷,可能比Propertis写得少
Springboot自带支持yaml格式的文件,只有在classpath(src/man/resources)下面有。
Springboot提供了两个类来加载yaml文件:YamlPropertiesFactoryBean和YamlMapFactoryBean
那么他们有什么区别呢?
举个简单的例子:(很有层级感吧)
environments:
dev:
url: https://dev.example.com
name: Developer Setup
prod:
url: https://another.example.com
name: My Cool App
这种格式是用YamlPropertiesFactoryBean来进行加载的,
那么上面的属性就会变成
environments.dev.url=https://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=https://another.example.com
environments.prod.name=My Cool App
这个加载出来就和properties文件格式一样了,但是作为开发者写的时候,是不是少写了很多不不要的配置。
(properties这样看起来又冗余,又不容易找到自己想要的,而且位置可以随意乱放,这样导致在查找起来很不方便)
my:
servers:
- dev.example.com
- another.example.com
像这种格式的,就需要用YamlMapFactoryBean来进行加载
它最终加载的结果是:
my.servers[0]=dev.example.com
my.servers[1]=another.example.com
这种格式也就是说,他一个属性会有两个值,这种可能后面用作切换是非常有用的
比如开发模式,测试模式,开发模式切换等。
最后说一下yaml的一些细节:
yaml格式的文件,后缀名可以是yaml,也可以是yml,两种都一样。
server:
servlet:
context-path: /
port: 8080
如上面,context-path: / 像这种,后面带值的,冒号后面一定要打一个空格,如果不打空格,那么他会连冒号一起当成一个属性,所以这个细节要注意,像server或者servlet后面只有一个冒号没有值的,可以不打空格