知識庫 / Spring / Spring Boot RSS 訂閱

在 Spring Boot 的 Properties 文件中使用環境變量

Spring Boot
HongKong
9
11:52 AM · Dec 06 ,2025

1. 概述

本教程將介紹如何在 Spring Boot 的 <em >application.properties</em><em >application.yml</em> 中使用環境變量。 此外,我們還將學習如何在代碼中引用這些屬性。

2. 在 application.properties 文件中使用環境變量

讓我們定義一個全局環境變量 JAVA_HOME,其值為 “C:\Program Files\Java\jdk-11.0.14”。

要使用此變量在 Spring Boot 的 application.properties 中,我們需要用花括號將其括起來:

java.home=${JAVA_HOME}

我們還可以以相同的方式使用系統屬性。例如,在 Windows 上,操作系統屬性默認已定義:

environment.name=${OS}

還可以將多個變量值組合起來。 讓我們定義另一個環境變量 HELLO_BAELDUNG,其值為“Hello Baeldung”。 我們可以現在連接這兩個變量:

baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME}

該屬性 baeldung.presentation 現在包含以下文本:“Hello Baeldung. Java 已安裝在以下文件夾中:C:\Program Files\Java\jdk-11.0.14“。

這樣,我們的屬性值會根據環境而不同。

3. 在代碼中使用特定環境的屬性

鑑於我們已經啓動了 Spring 上下文,現在我們將看到如何將屬性值注入到我們的代碼中。

3.1. 使用 @Value</em/> 註解注入值

首先,我們可以使用 @Value</em/> 註解。 @Value</em/> 處理 setter、構造函數和字段注入。

@Value("${baeldung.presentation}")
private String baeldungPresentation;

3.2. 從 Spring 環境獲取值

我們可以通過 Spring 的 Environment 獲取屬性值。我們需要使用自動裝配 (autowire) 實現:

@Autowired
private Environment environment;

// 獲取屬性值示例
String username = environment.getProperty("spring.profiles.active");
@Autowired
private Environment environment;

屬性值現在可以通過 getProperty() 方法獲取:

environment.getProperty("baeldung.presentation")

3.3. 使用 @ConfigurationProperties 組裝屬性

@ConfigurationProperties 註解在我們需要將屬性分組時非常有用。 我們將定義一個 Component,用於收集所有具有給定前綴的屬性,在本例中是 baeldung。 然後,我們可以為每個屬性定義一個 setter。 setter 的名稱是屬性的剩餘名稱。 我們的例子中只有一個,名為 presentation

@Component
@ConfigurationProperties(prefix = "baeldung")
public class BaeldungProperties {

    private String presentation;

    public String getPresentation() {
        return presentation;
    }

    public void setPresentation(String presentation) {
        this.presentation = presentation;
    }
}

我們現在可以自動注入一個 BaeldungProperties 對象:

@Autowired
private BaeldungProperties baeldungProperties;

最後,要獲取特定屬性的值,我們需要使用相應的 getter:

baeldungProperties.getPresentation()

4. 在 application.yml 文件中使用環境變量

類似於 application.propertiesapplication.yml 是一種配置文件,用於定義應用程序的各種屬性和設置。要使用環境變量,我們需要在屬性佔位符中聲明其名稱

下面是一個包含屬性佔位符和變量名的示例 application.yml 文件:

spring:
  datasource:
    url: ${DATABASE_URL}

上面的示例展示了我們如何在 Spring Boot 應用程序中導入數據庫 URL。 ${DATABASE_URL} 表達式提示 Spring Boot 查找名為 DATABASE_URL 的環境變量。

要在 application.yml 中定義環境變量,我們必須以美元符號開頭,後跟一個花括號、環境變量的名稱和一個花括號。 所有這些組合構成了屬性佔位符和環境變量的名稱。

我們還可以使用特定於環境的屬性在代碼中使用,就像我們使用 application.properties 時一樣。 我們可以使用 @Value 註解注入值。 此外,我們可以使用 Environment 類。 最後,我們可以使用 @ConfigurationProperties 註解。

5. 從環境變量中加載多個屬性

從 Spring Boot 3.5.0-M2 開始, 我們現在可以從單個環境變量中加載多個配置屬性。 傳統上,我們通常為每個屬性定義單獨的環境變量。 現在,

例如,讓我們定義一個名為 DATABASE_CONFIG 的環境變量:

export DATABASE_CONFIG="
DATABASE_URL=jdbc:h2:mem:testdb 
USERNAME=sa
PASSWORD=password
"

上述格式反映了在 application.properties 文件中使用的鍵值對結構。

或者,我們也可以使用 YAML 格式在環境變量中定義這些屬性:

export DATABASE_CONFIG=$(cat <<EOF
DATABASE_URL: jdbc:h2:mem:testdb
USERNAME: sa
PASSWORD: password
EOF
)

Spring Boot 支持在環境變量中使用 spring.config.import 屬性時,同時支持屬性格式和 YAML 格式的內容

接下來,通過使用 spring.config.import 屬性,在 application.properties 文件中引用環境變量:

spring.config.import=env:DATABASE_CONFIG

在這裏,我們使用 env 關鍵字,並指定環境變量名稱,從而提示 Spring Boot 從指定環境變量中加載屬性。

最後,我們使用數據庫配置中的一些屬性作為佔位符:

spring.datasource.url=${DATABASE_URL}
spring.datasource.username=${USERNAME}
spring.datasource.password=${PASSWORD}

在上述代碼中,我們使用了 DATABASE_CONFIG 環境變量中定義的屬性,避免了將每個屬性定義為單獨的環境變量。

6. 結論

在本文中,我們學習瞭如何根據環境定義具有不同值的屬性,並在代碼中使用它們。此外,我們還了解了如何在 <em >application.properties</em><em >application.yml</em> 文件中定義環境變量。最後,我們還查看了將定義的屬性注入到示例代碼中的示例。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.