面试突击74:properties和yml有什么区别?
properties 和 yml 都是 Spring Boot 支持的两种配置文件,它们可以看作是 Spring Boot 在不同时期的两款“产品”。在 Spring Boot 时代已经不需要使用 XML 文件格式来配置项目了,取而代之的是 properties 或 yml 文件。
properties 配置文件属于早期,也是目前创建 Spring Boot(2.x)项目时默认的配置文件格式,而 yml 可以看做是对 properties 配置文件的升级,属于 Spring Boot 的“新版”配置文件。
properties 和 yml 的区别主要体现在以下 4 点:
- 定义和定位不同;
- 语法不同;
- yml 更好的配置多种数据类型;
- yml 支持多种语言、通用性更好。
区别1:定义和定位不同
properties 翻译成中文是“属性”的意思,所以它在创建之初,就是用来在 Spring Boot 中设置属性的。
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language,翻译成中文是“另一种标记语言”。
所以从二者的定义可以看出:它们的定位和层次是完全不同的,properties 只是用来设置一些属性配置的,而 yml 的格局和愿景更大,它的定位是“另一种标记语言”,所以从格局上来讲 yml 就甩 properties 好几条街。
区别2:语法不同
properties 和 yml 语法区别很大,properties 配置文件的基本用法如下:
# 配置项目启动端口号 server.port=8088 # 开启调试模式 debug=true # 配置数据连接信息 spring.datasource.url=jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
从上述配置文件可以看出: properties 的基本语法格式是“key=value”的形式 ,而 yml 的配置文件的基本用法如下:
# 配置项目启动端口号 server: port: 9090 # 开启调试模式 debug: true # 配置数据连接信息 spring: datasource: url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver
从上述配置文件可以看出: yml 的基本语法格式是“key: value”的形式 ,且冒号后面的空格是不能被省略的,否则项目启动会报错:
从上述 properties 和 yml 配置数据库的连接信息可以看出, 相比于 properties 来说,yml 的语法更简洁,并且可读性更高 ,它们的区别如下:
区别3:yml 更好的配置多种数据类型
yml 除了可以很好的配置基础数据类型之外,它还可以很方便的配置对象、集合等数据类型。
在 yml 中配置对象数据类型:
student: id: 1 name: Java age: 18
或者是使用行内写法配置对象类型(与上面的写法的效果一致):
student: {id: 1,name: Java,age: 18}
在 yml 中配置数组也有两种写法,可以这样写:
animal: - Dog - Cat
或者使用行内写法:
animal: [Dog, Cat]
区别4:yml 可以跨语言
properties 格式的配置文件只适用于 Spring Boot 项目,也就是只适用于 Java 语言,而 yml 支持更多的开发语言,它可以用在 Java、PHP、Python、Ruby、JavaScript、Perl、Golang 等语言中。
至于作用嘛?如果一个公司有多个不同语言的开发团队,并且使用了配置中心(在线配置文件)的前提下,那么这些不同语言的开发团队就可以使用同一份配置文件了,也方便后期的管理和维护。
总结
properties 和 yml 都是 Spring Boot 支持的两种配置文件,其中 yml 格式的配置文件可以看作是对 properties 配置文件的升级。它们的主要区别有 4 点:定义和定位不同、语法不同:yml 的语法更简单,且可读性更高、yml 可以更好的配置多种数据类型,比如对象和集合、yml 可以跨语言使用,通用性更好。
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java面试真题解析
- 记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节
- 编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案
- 线程池底层原理详解与源码分析
- 30分钟掌握 Webpack
- 线性回归大结局(岭(Ridge)、 Lasso回归原理、公式推导),你想要的这里都有
- Django 之路由层
- 【前端必会】webpack loader 到底是什么
- day42-反射01
- 中心化决议管理——云端分析
- HashMap底层原理及jdk1.8源码解读
- 详解JS中 call 方法的实现
- 打印 Logger 日志时,需不需要再封装一下工具类?
- 初识设计模式 - 代理模式
- 设计模式---享元模式
- 密码学奇妙之旅、01 CFB密文反馈模式、AES标准、Golang代码
- [ML从入门到入门] 支持向量机:从SVM的推导过程到SMO的收敛性讨论
- 从应用访问Pod元数据-DownwardApi的应用
- Springboot之 Mybatis 多数据源实现
- Java 泛型程序设计
- CAS核心思想、底层实现