面試突擊74:properties和yml有什麼區別?

語言: CN / TW / HK

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”的形式 ,且冒號後面的空格是不能被省略的,否則專案啟動會報錯:

從上述 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面試真題解析

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