? 部落格主頁:準Java全棧開發工程師
? 00年出生,即將進入職場闖蕩,目標賺錢,可能會有人覺得我格局小、覺得俗,但不得不承認這個世界已經不再是以一條線來分割的平面,而是圍繞財富旋轉的球面,成為有錢人不是為了去掌控球體的轉向,而是當有人惡意掌控時,努力保護好家人和自己。
一、YAML 簡介
1、什麼是 YAML ?
- YAML(YAML Ain't Markup Language),一種資料序列化格式。
- 這種格式的配置檔案近些年逐漸進入市場,並開始佔據主導地位。
2、優點
- 較 xml 型別和 properties 型別相比,更容易閱讀,結構也更加的清晰。
- 容易與指令碼語言互動。
- 以資料為核心,重資料輕格式,輕格式並不是說可以不遵守格式,只是格式更加隨性一些。
3、副檔名
- 副檔名有兩種,無論是那個副檔名,都是 YAML 格式的配置檔案,擁有 YAML 的屬性。
- .yml ,這種副檔名更加主流一些
- .yaml
4、語法規則
- 對大小寫非常敏感,如:定義 age 和 AGE 都會認為是兩個屬性。
- 屬性層級關係使用多行描述,每行結尾使用冒號結束。
- 使用縮排表示層級關係,同層級左側對齊,只允許使用空格。
- 空格個數並不重要,只要保證同層級的左側對齊即可。
- 屬性值前面新增空格。
-
號表示註釋。
5、格式
server:
port: 80
- 切記:屬性值前面必須有一個空格。
- port 是 server 下的一個屬性,根據屬性層級之間使用多行描述,以及使用縮排表示的規則,port 的書寫位置如上所示,但一般情況下,這種格式我們無需過多糾結,我們回車換行後自動提供的格式一般都是正確的。
6、陣列資料
name: 準Java全棧開發工程師
server:
port: 80
# 陣列格式
likes:
- game
- movie
- music
- 陣列資料的屬性值換行書寫,以 “-” 減號開頭,注意屬性值前空格,如上述 likes 所示。
二、三種配置檔案
以配置埠號為例,介紹三種配置檔案及其格式。
1、properties 型別
- 在未接觸到 yaml 之前,我們的配置檔案大多數都是以 properties 結尾的檔案。
server.port=80
- 格式為:屬性名=屬性值 。
- 這種方式還是非常常見的,我們之前在配置連線資料庫相關資訊的 jdbc.properties 檔案也是使用的該方式。
2、yml 型別
server:
port: 81
- 將埠號設定為 81 。
3、yaml 型別
- yml 和 yaml 只是副檔名不同而已,其實是一種型別的配置檔案。
server:
port: 82
4、優先順序
- 當專案中同時存在上述三個配置檔案時,用採用那個配置檔案呢?我們可以通過觀察埠號來獲得優先順序順序。
- 埠號為 80 ,說明優先採用了 properties 型別的配置檔案,它的優先順序最高。
- 將 properties 配置檔案中的配置內容刪除,觀察 .yaml 和 .yml 那種檔案優先順序更高。
- 埠號又變為了 81 ,說明 .yml 檔案優先順序更高一些,雖然 .yaml 只是不同的副檔名罷了。
- 總結:優先順序由高到低 properties > yml > yaml
三、YAML 程式碼提示功能
- 有很多小夥伴反應,說在寫 YAML 檔案時,程式碼不提示。
- 沒有程式碼提示功能,對我們開發還是造成了一定的影響的,下面就帶著大家來解決這個問題。
- 首先進入到模組管理。
- 將 YAML 型別的兩個配置檔案新增。
- 選中建立的兩個配置檔案,完成後點選 “OK” 即可。
- 此時的配置檔案已經變成了三個。
- 重新回到配置檔案看是否實現了程式碼提示功能。
- 已經實現了程式碼提示功能,雖然是 YAML 檔案,但是程式碼提示的還是按照 properties 型別進行的,並不影響,找到需要的屬性直接回車後還是會呈現出 YAML 格式。
四、讀取 YAML 配置檔案中的資料
1、資料準備
sourceName: SpringBoot
server:
port: 80
user:
name: 準Java全棧開發工程師
age: 22
likes:
- music
- game
- movie
2、方式一:@Value
@SpringBootTest
class DemoApplicationTests {
@Value("${sourceName}")
private String sourceName;
@Value("${server.port}")
private Integer port;
@Value("${user.likes[0]}")
private String likes;
@Test
void contextLoads() {
System.out.println(sourceName);
System.out.println(port);
System.out.println(likes);
}
}
- 將要讀取的資料定義為屬性,使用 @Value 註解讀取配置檔案中的資料並注入給屬性,之後在方法體中可以直接使用。
3、方式二:Environment
@SpringBootTest
class DemoApplicationTests {
@Autowired
private Environment environment;
@Test
void contextLoads() {
System.out.println(environment.getProperty("sourceName"));
System.out.println(environment.getProperty("server.port"));
System.out.println(environment.getProperty("user.likes[0]"));
}
}
- SpringBoot 提供有 Environment 物件,可以將配置檔案中的所有資料都封裝到該物件中,使用 getProperty 方法,將想要讀取的資料名作為引數傳入即可。
4、方式三:自定義物件
user:
name: 準Java全棧開發工程師
age: 22
likes:
- music
- game
- movie
- 對於配置類中的 user 資料,其下還有很多子層,如果我們想一下子將 user 的所有資料都取出,應該怎麼做呢?將其封裝為一個物件。
@Component // 將bean的建立工作交由Spring管理
// @ConfigurationProperties 註解表示載入配置檔案
// 使用prefix字首表示只載入指定字首的資料
@ConfigurationProperties(prefix = "user")
public class User {
private String name;
private Integer age;
private Object[] likes;
// get、set、toString和構造器方法省略
}
- 和我們定義實體類沒有太大的區別,只是這次不再是和資料庫表中的欄位對應,而是和配置檔案中定義的資料對應。
- 除此之外,還需要使用 ConfigurationProperties 註解載入配置檔案,使用 prefix 指定載入資料的字首。
@SpringBootTest
class DemoApplicationTests {
@Autowired
private User user;
@Test
void contextLoads() {
System.out.println(user);
}
}
- 使用該方式在定義實體類時,會報紅提示
- 我們只需要在 pom.xml 檔案中匯入相應的依賴即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
? 以上就是文章的全部內容啦,諸佬如果有任何建議都可以提哦。
? 創作不易,如果覺得對您有幫助的話,歡迎關注✨點贊?收藏?哦。