Spring YAML與屬性檔案配置檔案對比 | Baeldung

banq發表於2020-06-15

YAML是用於配置檔案的人性化表示法。為什麼相比Spring Boot中的屬性檔案Properties,我們更喜歡這種資料序列化?除了可讀性和減少重複之外,YAML是在部署時Configuration as Code(配置即程式設計)的理想語言。

12因子身份驗證器建議的那樣,將YAML用於Spring DevOps有助於在環境中儲存配置變數。

在本教程中,我們將比較Spring YAML和屬性檔案,以檢查使用它們之間的主要優點。但是請記住,選擇YAML而非屬性檔案配置有時是個人喜好的決定。

YAML代表“ YAML Ain't Markup Language” 的遞迴首字母縮寫。它具有以下特徵:

  • 更清晰,更人性化
  • 非常適合分層配置資料
  • 它支援增強功能,例如地圖,列表和標量型別

這些功能使YAML成為Spring配置檔案的完美伴侶。在這裡,對於那些以YAML開頭的人來說要小心一點:由於其縮排規則,一開始編寫它可能有點乏味。

讓我們看看它是如何工作的!

YAML是一種用於配置檔案的特殊資料格式。它更具可讀性,並且在屬性檔案上提供了增強的功能。因此,在屬性檔案配置上推薦這種表示法是有意義的。此外,從1.2版開始,YAML是JSON的超集。

Spring配置檔案允許分離環境並對其應用不同的屬性。YAML增加了在同一檔案中包含多個配置檔案的可能性。

在我們的案例中,出於部署目的,我們將有三個:測試test,開發dev和生產prod:

spring:
  profiles:
    active:
    - test
 
---
 
spring:
  profiles: test
name: test-YAML
environment: testing
servers:
  - www.abc.test.com
  - www.xyz.test.com
   
---
 
spring:
  profiles: prod
name: prod-YAML
environment: production
servers:
  - www.abc.com
  - www.xyz.com
     
---
 
spring:
    profiles: dev
name: ${DEV_NAME:dev-YAML}
environment: development
servers:
    - www.abc.dev.com
    - www.xyz.dev.com

現在讓我們檢查spring.profiles.active屬性,該屬性預設情況下分配測試環境。我們可以使用不同的配置檔案重新部署工件,而無需再次構建原始碼。

Spring的另一個有趣功能是您可以通過環境變數啟用配置檔案

export SPRING_PROFILES_ACTIVE=dev

可以配置YAML屬性,直接從環境中分配值:

name: ${DEV_NAME:dev-YAML}

我們可以看到,如果未配置任何環境變數,則使用預設值test-YAML。

YAML的層次結構提供了減少配置屬性檔案高層的方法。我們來看一個例子的區別:

component:
  idm:
    url: myurl
    user: user
    password: password
    description: >
      this should be a long
      description
  service:
    url: myurlservice
    token: token
    description: >
      this should be another long
      description

使用屬性檔案,相同的配置將變得多餘:

component.idm.url=myurl
component.idm.user=user
component.idm.password=password
component.idm.description=this should be a long \
                          description
component.service.url=myurlservice
component.service.token=token
component.service.description=this should be another long \ 
                              description

YAML的層次性極大地提高了可讀性。這不僅是避免重複的問題,而且是很好使用的縮排,它完美地描述了配置的含義和用途。

我們可以使用YAML屬性檔案配置列表,有兩種方法可以分配值並將它們儲存在列表中:

servers:
  - www.abc.test.com
  - www.xyz.test.com
   
external: [www.abc.test.com, www.xyz.test.com]

兩個示例提供了相同的結果。使用屬性檔案進行的等效配置將更難以閱讀:

servers[0]=www.abc.test.com
servers[1]=www.xyz.test.com
 
external=www.abc.test.com, www.xyz.test.com

同樣,YAML版本更加易於閱讀和清晰。

同樣,我們可以配置map:

map:
  firstkey: key1
  secondkey: key2

 

相關文章