概念介绍
properties 和 yml 都是 Spring Boot 支持的两种配置文件,它们可以看作是 Spring Boot 在不同时期的两款“产品”。在 Spring Boot 时代已经不需要使用 XML 文件格式来配置项目了,取而代之的是 properties 或 yml 文件。
- properties: properties配置文件属于早期,也是目前创建 Spring Boot(2.x)项目时默认的配置文件格式;
- yml :yml可以看做是对 properties 配置文件的升级,属于 Spring Boot 的“新版”配置文件。
补充引用:
.properties是一种主要在Java相关技术中用来存储应用程序的可配置参数的文件的文件扩展名。它们也可以存储用于国际化和本地化的字符串,这种文件被称为属性资源包(Property Resource Bundles)。 每个参数被存储为一对字符串:一个存储名称参数(被称为“键”),另一个存储值。
YAML(/ˈjæməl/)语言,是一种可读性高、用来表达数据序列的格式。YAML的意思是 ‘Yet Another Markup Language’,即‘仍是一种标记语言’。这个语言以数据为中心。
存放路径
两种配置文件一般都是放在src/main/resources目录下
优先级别
properties的优先级会高于yml,因为正常的情况是先加载yml,接下来加载properties文件。所以如果项目中同时存在这两个文件,两个文件配置同一个配置参数,properties会生效,yml不会生效。
区别说明
两种配置文件示例如下:
# properties
server.port=8088 # 配置项目启动端口号
debug=true # 开启调试模式
# 配置数据连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:8080/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# yaml
server:
port: 8088 # 配置项目启动端口号
debug: true # 开启调试模式
spring: # 配置数据连接信息
datasource:
url: jdbc:mysql://127.0.0.1:8080/test?characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
梳理区别:
-
结构不同
yml采用树形结构,更有层次感,可读性很强;相反,properties 则更为直接。可以看出properties存在着数据冗余,一切配置都需要从头写到尾。 -
语法不同
properties 的基本语法格式是“key=value”的形式;yml 的基本语法格式是“key: value”的形式: -
定位不同
properties 翻译成中文是“属性”的意思,所以它在创建之初,就是用来在 Spring Boot 中设置属性的。yml 是 YAML 是缩写,它的全称 Yet Another Markup Language,翻译成中文是“另一种标记语言”,支持更多的开发语言,它可以用在 Java、PHP、Python、Ruby、JavaScript、Perl、Golang 等语言中,如果一个公司有多个不同语言的开发团队,并且使用了配置中心(在线配置文件)的前提下,那么这些不同语言的开发团队就可以使用同一份配置文件了,也方便后期的管理和维护。所以从二者的定义可以看出:它们的定位和层次是完全不同的,properties 只是用来设置一些属性配置的,而 yml 的格局和愿景更大,它的定位是“另一种标记语言”,所以从格局上来讲 yml 就甩 properties 好几条街。
其他说明
yml 需要注意坑:
- 冒号后面需要加空格
- 在yml中缩进一定不能使用TAB,否则会报很奇怪的错误,缩进只能用空格。
参考资料
properties和yml进行对比 - DJ同学 - 博客园
面试突击74:properties和yml有什么区别? - Java中文社群 - 博客园
感谢以上作者,如有侵权请及时告知删除。