开发者社区> 磊哥聊Java> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

面试突击74:properties和yml有什么区别?

简介: 面试突击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 点:

  1. 定义和定位不同;
  2. 语法不同;
  3. yml 更好的配置多种数据类型;
  4. 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”的形式,且冒号后面的空格是不能被省略的,否则项目启动会报错:
image.png
从上述 properties 和 yml 配置数据库的连接信息可以看出,相比于 properties 来说,yml 的语法更简洁,并且可读性更高,它们的区别如下:
image.png

区别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面试真题解析

面试合集:https://gitee.com/mydb/interview

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
GitHub上标星75k+超牛的《Java面试突击版》,分享PDF离线版
前言 不论是校招还是社招都避免不了各种面试。笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。 运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试:
0 0
面试突击91:MD5 加密安全吗?
面试突击91:MD5 加密安全吗?
0 0
面试突击90:过滤器和拦截器有什么区别?
面试突击90:过滤器和拦截器有什么区别?
0 0
面试突击89:事务隔离级别和传播机制有什么区别?
面试突击89:事务隔离级别和传播机制有什么区别?
0 0
面试突击88:加入事务和嵌套事务有什么区别?
面试突击88:加入事务和嵌套事务有什么区别?
0 0
面试突击87:说一下 Spring 事务传播机制?
面试突击87:说一下 Spring 事务传播机制?
0 0
面试突击86:SpringBoot 事务不回滚?怎么解决?
面试突击86:SpringBoot 事务不回滚?怎么解决?
0 0
面试突击85:为什么事务@Transactional会失效?
面试突击85:为什么事务@Transactional会失效?
0 0
面试突击84:Spring 有几种事务隔离级别?
面试突击84:Spring 有几种事务隔离级别?
0 0
面试突击83:什么情况会导致@Transactional事务失效?
面试突击83:什么情况会导致@Transactional事务失效?
0 0
+关注
磊哥聊Java
是非审之于己,毁誉听之于人,得失安之于数。欢迎关注我的公众号「Java中文社群」
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Java开发者面试百宝书
立即下载
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧
立即下载
面试常考算法
立即下载