- yaml格式介紹
YAML(YAML Ain’t Markup Language)是一種基於層次結構的數據序列化格式,旨在提供一種易讀、人類友好的數據表示方式。
與.properties文件相比,YAML格式有以下優勢:
- 層次結構:YAML文件使用縮進和冒號來表示層次結構,使得數據之間的關係更加清晰和直觀。這樣可以更容易理解和維護複雜的配置,特別適用於深層次嵌套的配置情況。
- 自我描述性:YAML文件具有自我描述性,字段和值之間使用冒號分隔,並使用縮進表示層級關係。這使得配置文件更易於閲讀和理解,並且可以減少冗餘的標點符號和引號。
- 註釋支持:YAML格式支持註釋,可以在配置文件中添加説明性的註釋,使配置更具可讀性和可維護性。相比之下,
.properties文件不支持註釋,無法提供類似的解釋和説明。 - 多行文本:YAML格式支持多行文本的表示,可以更方便地表示長文本或數據塊。相比之下,
.properties文件需要使用轉義符或將長文本拆分為多行。 - 類型支持:YAML格式天然支持複雜的數據類型,如列表、映射等。這使得在配置文件中表示嵌套結構或數據集合更加容易,而不需要進行額外的解析或轉換。
- 更好的可讀性:由於YAML格式的特點,它更容易被人類讀懂和解釋。它減少了配置文件中需要的特殊字符和語法,讓配置更加清晰明瞭,從而減少了錯誤和歧義。
綜上所述,YAML格式相對於.properties文件具有更好的層次結構表示、自我描述性、註釋支持、多行文本表示、複雜數據類型支持和更好的可讀性。這些特點使YAML成為一種有力的配置文件格式,尤其適用於複雜的配置需求和人類可讀的場景。然而,選擇使用YAML還是.properties取決於實際需求和團隊的偏好,簡單的配置可以使用.properties,而複雜的配置可以選擇YAML以獲得更多的靈活性和可讀性
- yaml語法説明
- 數據結構用樹形結構呈現,通過縮進來表示層級,
- 連續的項目(集合)通過減號 ” - ” 來表示
- 鍵值結構裏面的key/value對用冒號 ” : ” 來分隔。
- YAML配置文件的擴展名是yaml 或 yml
- 例如:
# YAML配置文件示例
app_name: 我的應用程序
version: 1.0.0
author: 張三
database:
host: localhost
port: 5432
username: admin
password: password123
features:
- 登錄
- 註冊
- 儀表盤
settings:
analytics: true
theme: dark
- 配置文件
spring:
jdbc:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql:///springboot
username: root
password: root
server:
port: 80
- 讀取配置文件
讀取方式和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 + '\'' +
'}';
}
}
- 測試效果
在controller注入,輸出進行測試
@Autowired
private DataSourceProperties dataSourceProperties ;
@RequestMapping(path = "/hello")
public String sayHello() {
System.out.println(dataSourceProperties);
return "Hello Spring Boot ! " ;
}