application.yml 與 application.properties詳解


作者其他技術文章

1) 初識 Spring Boot-Spring Boot教程深入淺出系列

2)spring cloud 入門教程

3)SpringCloud入門之Spring Boot多環境配置切換指南

4) Elasticsearch從入門到精通

5) Kibana從入門到精通

6) logstash快速入門實戰指南

7)Oracle性能優化之查詢語句通用原則  

8)Redis常用命令

9) 詳解Maven用戶的配置settings.xml

10SpringCloud入門之YAML格式文件規范學習

11)#ifndef、#def、#endif說明

12)SpringCloud入門之常用的配置文件 application.yml和 bootstrap.yml區別

 

1. 概述

Spring Boot 中的一個常見做法是使用外部配置來定義我們的屬性這允許我們在不同的環境中使用相同的應用程序代碼。

我們可以使用屬性文件、YAML 文件、環境變量和命令行參數。

在這個簡短的教程中,我們將探討屬性和 YAML 文件之間的主要區別。

2. 屬性配置

默認情況下,Spring Boot 可以訪問application.properties文件中設置的配置,該文件使用鍵值格式:

spring.datasource.url=jdbc:h2:dev
spring.datasource.username=SA
spring.datasource.password=password

在這里每一行都是一個配置。因此在application.properties文件中我們必須通過對鍵使用相同的前綴來表示分層數據。而且在這個application.properties例子中,每個鍵都屬於spring.datasource。

2.1. 在 application.properties文件屬性中使用占位符

在我們application.properties或application.yml文件定義的值中,我們可以使用帶有${}語法的占位符來引用application.properties或application.yml中出現過的其他鍵、系統屬性或環境變量的內容,以下示例演示如何在application.properties使用這項技能:

app.name=MyApp
app.description=${app.name} is a Spring Boot application

2.2. application.properties的列表結構

如果我們的application.properties里有具有不同值的相同類型的屬性,我們可以用數組索引表示列表結構:

application.servers[0].ip=127.0.0.1 application.servers[0].path=/path1 application.servers[1].ip=127.0.0.2 application.servers[1].path=/path2 application.servers[2].ip=127.0.0.3 application.servers[2].path=/path3

2.3. 多個配置文件

從 2.4.0 版本開始,Spring Boot 支持創建多文檔屬性application.properties或application.yml文件。簡單地說,我們可以將單個物理文件拆分為多個邏輯文檔。

這允許我們為需要聲明的每個配置文件定義一個文檔,所有這些都在同一個application.properties或application.yml文件中,以下示例演示如何在application.properties定義這些屬性:

logging.file.name=myapplication.log
bael.property=defaultValue
#---
spring.config.activate.on-profile=dev
spring.datasource.password=password
spring.datasource.url=jdbc:h2:dev
spring.datasource.username=SA
bael.property=devValue
#---
spring.config.activate.on-profile=prod
spring.datasource.password=password
spring.datasource.url=jdbc:h2:prod
spring.datasource.username=prodUser
bael.property=prodValue

請注意,我們使用“#---”或“---”符號來指示我們要拆分文檔的位置,可以參閱本博主的文章SpringCloud入門之Spring Boot多環境配置切換指南

在這個application.properties例子中,我們有兩個帶有不同邏輯的聲明部分此外,我們可以在根級別擁有一組通用屬性——在這種情況下,logging.file.name屬性在所有application.properties或application.yml配置文件中都相同。

2.4. 跨多個文件的配置文件

作為在同一文件中擁有不同配置文件的替代方案,我們可以在不同文件中存儲多個application.properties或application.yml配置文件。在 2.4.0 版之前,這是唯一可用於屬性文件的方法

我們通過將配置文件的名稱放在文件名中來實現這一點 - 例如,application-dev.yml或 application-dev.properties。可以參閱本博主的文章SpringCloud入門之Spring Boot多環境配置切換指南

3. YAML 配置

3.1. YAML 格式

除了 Java 屬性文件,我們還可以在 Spring Boot 應用程序中使用基於YAML的配置文件。YAML 是一種用於指定分層配置數據的便捷格式,關於YAML的學習可以參閱手把手學系列之YAML格式文件規范學習

現在,讓我們從application.properties屬性文件中獲取相同的示例並將其轉換為 YAML格式application.yml配置文件:

 
spring:
    datasource:
        password: password
        url: jdbc:h2:dev
        username: SA

這比它的屬性文件application.properties更具可讀性,因為它不包含重復的前綴。

3.2. 列表結構

YAML 有一種更簡潔的格式來表達列表:

application:
    servers:
    -   ip: '127.0.0.1' path: '/path1' - ip: '127.0.0.2' path: '/path2' - ip: '127.0.0.3' path: '/path3'

3.3. 多個配置文件

與屬性文件application.properties不同,YAML 在設計上支持多文檔application.yml文件,因此無論我們使用哪個版本的 Spring Boot,我們都可以在同一個application.yml文件中存儲多個配置文件。

然而,application.yml在這種情況下,規范表明我們必須使用三個破折號來指示新文檔的開始

logging:
  file:
    name: myapplication.log
---
spring:
  config:
    activate:
      on-profile: staging
  datasource:
    password: 'password'
    url: jdbc:h2:staging
    username: SA
bael:
  property: stagingValue

注意:我們通常不希望在我們的項目中同時包含標准的application.propertiesapplication.yml 文件,因為這可能會導致意想不到的結果。

例如,如果我們將上面顯示的屬性(在application.yml文件中)與第 2.3 節中描述的屬性結合起來,那么bael.property將被分配 defaultValue 而不是特定於配置文件的值。這僅僅是因為application.properties 是稍后加載的覆蓋了當時分配的值。

4. Spring Boot 使用

現在我們已經定義了我們的配置,讓我們看看如何訪問它們。

4.1. 注釋

我們可以使用@Value注釋注入我們的屬性值

@Value("${key.something}") private String injectedProperty;

在這里,屬性key.something通過字段注入被注入到我們的一個對象中。

4.2. 環境抽象

我們還可以使用Environment API獲取屬性的值

@Autowired private Environment env; public String getSomeKey(){ return env.getProperty("key.something"); } 

4.3. 配置屬性注解

最后,我們還可以使用@ConfigurationProperties 批注將我們的屬性綁定到類型安全的結構化對象:

@ConfigurationProperties(prefix = "mail") public class ConfigProperties { String name; String description; ...

5. 結論

在本文中,我們看到了Spring Boot 配置文件yml屬性之間的一些差異 我們還看到了它們的值如何引用其他屬性。最后,我們研究了如何將值注入我們的運行時。

 

關於Java平台下微服務實踐可以參考筆者以下文章

使用 Zuul、Ribbon、Feign、Eureka 和 Sleuth、Zipkin 創建簡單spring cloud微服務用例-spring cloud 入門教程
微服務集成SPRING CLOUD SLEUTH、ELK 和 ZIPKIN 進行監控-spring cloud 入門教程
使用Hystrix 、Feign 和 Ribbon構建微服務-spring cloud 入門教程

使用 Spring Boot Admin 監控微服務-spring cloud 入門教程

基於Redis做Spring Cloud Gateway 中的速率限制實踐-spring cloud 入門教程
集成SWAGGER2服務-spring cloud 入門教程
Hystrix 簡介-spring cloud 入門教程
Hystrix 原理深入分析-spring cloud 入門教程 
使用Apache Camel構建微服務-spring cloud 入門教程
集成 Kubernetes 來構建微服務-spring cloud 入門教程
集成SPRINGDOC OPENAPI 的微服務實踐-spring cloud 入門教程
SPRING CLOUD 微服務快速指南-spring cloud 入門教程
基於GraphQL的微服務實踐-spring cloud 入門教程
最火的Spring Cloud Gateway 為經過身份驗證的用戶啟用速率限制實踐-spring cloud 入門教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM