一.两者的区别
由于具有天然的树结构,我尝试将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的相同属性