1. yaml格式介紹
    YAML(YAML Ain’t Markup Language)是一種基於層次結構的數據序列化格式,旨在提供一種易讀、人類友好的數據表示方式。
    .properties文件相比,YAML格式有以下優勢:
  1. 層次結構:YAML文件使用縮進和冒號來表示層次結構,使得數據之間的關係更加清晰和直觀。這樣可以更容易理解和維護複雜的配置,特別適用於深層次嵌套的配置情況。
  2. 自我描述性:YAML文件具有自我描述性,字段和值之間使用冒號分隔,並使用縮進表示層級關係。這使得配置文件更易於閲讀和理解,並且可以減少冗餘的標點符號和引號。
  3. 註釋支持:YAML格式支持註釋,可以在配置文件中添加説明性的註釋,使配置更具可讀性和可維護性。相比之下,.properties文件不支持註釋,無法提供類似的解釋和説明。
  4. 多行文本:YAML格式支持多行文本的表示,可以更方便地表示長文本或數據塊。相比之下,.properties文件需要使用轉義符或將長文本拆分為多行。
  5. 類型支持:YAML格式天然支持複雜的數據類型,如列表、映射等。這使得在配置文件中表示嵌套結構或數據集合更加容易,而不需要進行額外的解析或轉換。
  6. 更好的可讀性:由於YAML格式的特點,它更容易被人類讀懂和解釋。它減少了配置文件中需要的特殊字符和語法,讓配置更加清晰明瞭,從而減少了錯誤和歧義。

綜上所述,YAML格式相對於.properties文件具有更好的層次結構表示、自我描述性、註釋支持、多行文本表示、複雜數據類型支持和更好的可讀性。這些特點使YAML成為一種有力的配置文件格式,尤其適用於複雜的配置需求和人類可讀的場景。然而,選擇使用YAML還是.properties取決於實際需求和團隊的偏好,簡單的配置可以使用.properties,而複雜的配置可以選擇YAML以獲得更多的靈活性和可讀性

  1. yaml語法説明
  1. 數據結構用樹形結構呈現,通過縮進來表示層級,
  2. 連續的項目(集合)通過減號 ” - ” 來表示
  3. 鍵值結構裏面的key/value對用冒號 ” : ” 來分隔。
  4. YAML配置文件的擴展名是yaml 或 yml
  5. 例如:
# YAML配置文件示例
app_name: 我的應用程序
version: 1.0.0
author: 張三

database:
  host: localhost
  port: 5432
  username: admin
  password: password123

features:
  - 登錄
  - 註冊
  - 儀表盤

settings:
  analytics: true
  theme: dark
  1. 配置文件
spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql:///springboot
      username: root
      password: root
      
server:
  port: 80
  1. 讀取配置文件

讀取方式和properties一致

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class DataSourceProperties {

    @Value("${spring.jdbc.datasource.driverClassName}")
    private String driverClassName;

    @Value("${spring.jdbc.datasource.url}")
    private String url;

    @Value("${spring.jdbc.datasource.username}")
    private String username;

    @Value("${spring.jdbc.datasource.password}")
    private String password;

    // 生成get set 和 toString方法
    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "DataSourceProperties{" +
                "driverClassName='" + driverClassName + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
  1. 測試效果
    在controller注入,輸出進行測試
@Autowired
private DataSourceProperties dataSourceProperties ;

@RequestMapping(path = "/hello")
public String sayHello() {
  System.out.println(dataSourceProperties);
  return "Hello Spring Boot ! " ;
}