一.两者的区别

由于具有天然的树结构,我尝试将properties文件更改为yml文件,并找到了一些值得注意的地方。

1、在属性文件中用“.”分割,在yml中用“:”分割;

2、yml的数据格式与json的格式相似,都是K-V格式,用“:”赋值

3、不要在yml中使用制表符进行缩进。 否则,就会报告奇怪的错误; 缩进特别只能用空间! )

4、yml每个k的冒号后面必须有空格;

5、使用spring cloud的maven构建的项目,在将properties变更为yml后,必须进行mvn clean insatll

6、yml是跨语言的:可以在JAVA、go、python等多种语言中使用。 例如,在云计算中使用go和JAVA时,可以在配置中心中使用相同的配置!

7、支持列表3360与properties仅支持键值对数据不同,yml配置文件支持列表如下

当然,从properties迁移到yml文件时会遇到很多孔,所以在此处记录:

1 )层次关系缩进不能每次使用制表符键:如2.4.6所示。

2,每个key后面必须添加:每个:后面必须添加空格!

3、清单短横线后面需要空格。

两个重点:

第一,yml支持中文内容,properties想使用中文,但只能用unicode编码

第二个是顺序问题。 properties不保证加载顺序。 yml有优先顺序。 在实际的用例(例如spring cloud zuul网关路由配置)中,如果一个uri同时满足两个匹配规则,则properties不知道使用的是哪个规则。 yml一定在使用后面的路由规则

Java属性加载属性文件后,无法确保输出顺序与文件中的顺序匹配。 因为Properties继承自Hashtable,key/value直接存在于Hashtable中,Hashtable不保证出入顺序。

总是有关注顺序一致的需求。 就像正好有org.Apache.com mons.collections.order dmap (其实是用LinkedHashMap保证顺序)一样,我们也想要OrderdProperties。

二.在Spring Boot上加载application.properties和application.yml的顺序

使用@PropertySource注释加载自定义配置文件。 此注释无法加载yml配置文件。 使用@Value注释获取文档中的参数值

application.properties和application.yml文件可以位于以下四个位置:

位于外部、APP应用程序执行目录的/congfig子目录中。

外部,位于APP应用程序运行的目录中

内置,在config包内

内置,Classpath根目录

同样,该列表按优先级排序。 也就是说,src/main/resources/config下的application.properties覆盖了src/main/resources下的application.properties的相同属性