知識庫 / Spring / Spring Cloud RSS 訂閱

Spring Cloud 中 Netflix Archaius 簡介

Spring Cloud
HongKong
6
01:43 PM · Dec 06 ,2025

1. 概述

Netflix Archaius 是一個強大的配置管理庫。

簡單來説,它是一個框架,可以從多個不同的來源收集配置屬性,並提供快速、線程安全的訪問方式。

此外,該庫允許在運行時動態更改屬性,從而使系統能夠在不重啓應用程序的情況下獲取這些變體。

在本入門教程中,我們將設置一個簡單的 Spring Cloud Archaius 配置,解釋其背後的工作原理,並最終看到 Spring 如何擴展基本配置。

2. Netflix Archaius 功能

正如我們所知,Spring Boot 已經提供了用於管理 外部配置 的工具,因此為什麼要設置不同的機制呢?

好吧,《Archaius》提供了一些方便且有趣的特性,這些特性並未被任何其他配置框架所考慮。 它的主要特點包括:

  • 動態和類型化的屬性
  • 在屬性發生變更時觸發的調用機制
  • 動態配置源的就緒實現,例如 URL、JDBC 和 Amazon DynamoDB
  • 一個 JMX MBean,可以通過 Spring Boot Actuator 或 JConsole 訪問,用於檢查和操作屬性
  • 動態屬性驗證

這些優勢在許多場景中都非常有用。

因此,Spring Cloud 已經開發了一個庫,允許輕鬆配置“Spring 環境橋”,以便 Archaius 可以從 Spring 環境中讀取屬性。

3. 依賴項

讓我們將 spring-cloud-starter-netflix-archaius 添加到我們的應用程序中,它將為我們的項目添加所有必要的依賴項。

可選地,我們還可以將 spring-cloud-netflix 添加到 dependencyManagement 部分,並依賴其對工件版本的規範:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-archaius</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix</artifactId>
            <version>2.0.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

注意:我們可以通過 Maven Central 驗證我們是否使用了最新版本的 啓動器庫

4. 使用方法

一旦我們添加了所需的依賴項,我們就能訪問由框架管理的所有屬性:

DynamicStringProperty dynamicProperty 
  = DynamicPropertyFactory.getInstance()
  .getStringProperty("baeldung.archaius.property", "default value");

String propertyCurrentValue = dynamicProperty.get();

讓我們通過一個簡短的例子來了解其如何直接可用。

4.1. 快速示例

默認情況下,它會動態管理在應用程序類路徑中名為 config.properties 的文件中定義的的所有屬性。

讓我們將其添加到我們的資源文件夾中,並添加一些任意屬性:

#config.properties
baeldung.archaius.properties.one=one FROM:config.properties

現在我們需要一種方式來在任何特定時刻檢查屬性的值。在這種情況下,我們將創建一個 RestController,它以 JSON 響應檢索這些值:

@RestController
public class ConfigPropertiesController {
	
    private DynamicStringProperty propertyOneWithDynamic
      = DynamicPropertyFactory.getInstance()
      .getStringProperty("baeldung.archaius.properties.one", "not found!");
	
    @GetMapping("/property-from-dynamic-management")
    public String getPropertyValue() {
	return propertyOneWithDynamic.getName() + ": " + propertyOneWithDynamic.get();
    }
}

我們來試試看。我們可以向這個端點發送請求,服務將會從 config.properties 中檢索出存儲的值,正如預期。

目前一切順利,對嗎?好的,我們繼續更改 classpath 文件中屬性的值,而無需重啓服務。結果,大約一分鐘後,對端點的調用應該檢索到新的值。是不是很酷呢?

接下來,我們將嘗試瞭解其背後的運作原理。

5. 它如何工作?

首先,讓我們嘗試理解整體架構。

Archaius 是 Apache Commons Configuration 庫 的擴展,它添加了一些有用的功能,例如用於動態源的輪詢框架,具有高吞吐量和線程安全的實現。

spring-cloud-netflix-archaius 庫隨後發揮作用,它將所有不同的屬性源合併,並使用這些源自動配置 Archaius 工具。

5.1. Netflix Archaius 庫

它通過定義一個複合配置(Composite Configuration),該配置是一系列來自不同來源的各種配置的集合而運作。

此外,這些配置源(Configuration Sources)中的某些可能支持在運行時進行輪詢,以獲取變更。Archaius 提供接口和一些預定義的實現,用於配置這些類型的源。

源的集合是分層化的,因此如果一個屬性在多個配置中存在,則最終值將是頂層配置中的值。

最後,一個ConfigurationManager 處理全局配置和部署上下文。它可以安裝最終的複合配置,或檢索已安裝的配置以進行修改。

5.2. Spring Cloud 支持

Spring Cloud Archaius 庫的主要任務是合併所有不同的配置源,將其作為 <em >ConcurrentCompositeConfiguration</em >> 並使用ConfigurationManager> 安裝。

配置源的優先級順序如下:

  • 上下文中的任何 Apache Common Configuration `AbstractConfiguration> Bean
  • Spring ConfigurableEnvironment> 中定義的全部源
  • 我們在上述示例中看到的默認 Archaius 源
  • Apache 的 <em >SystemConfiguration</em >> 和EnvironmentConfiguration> 源

此外,該 Spring Cloud 庫還提供了一個 Actuator `Endpoint> 的定義,用於監控和與屬性進行交互。 其使用方法超出了本教程的範圍。

6. 調整和擴展 Archaius 配置

現在我們對 Archaius 的工作原理有了更深入的瞭解,因此我們準備好分析如何將配置調整為我們的應用程序,或者如何使用配置源來擴展功能。

6.1. Archaius 支持的配置屬性

如果希望 Archaius 能夠考慮與 config.properties 類似的其它配置文件,則可以定義 archaius.configurationSource.additionalUrls 系統屬性。

該值會被解析為一個由逗號分隔的 URL 列表,因此,在啓動應用程序時,我們可以這樣添加該系統屬性:

-Darchaius.configurationSource.additionalUrls=
  "classpath:other-dir/extra.properties,
  file:///home/user/other-extra.properties"

Archaius 將首先讀取 config.properties 文件,然後是其他文件,按照指定順序進行。因此,後文件中定義的屬性將優先於先前定義的屬性。

還有一些其他的系統屬性可以用來配置 Archaius 默認配置的各個方面:

  • archaius.configurationSource.defaultFileName: 類路徑中的默認配置文件的名稱
  • archaius.fixedDelayPollingScheduler.initialDelayMills: 讀取配置源的初始延遲時間
  • archaius.fixedDelayPollingScheduler.delayMills: 兩次讀取源的延遲時間;默認值為 1 分鐘

6.2. 使用 Spring 添加額外的配置源

我們如何向描述的框架中添加不同的配置源,並管理優先級高於 Spring 環境中定義的動態屬性?

如第 4.2 節所述,我們可以意識到,由 Spring 定義的 Composite Configuration 中的最高配置是 AbstractConfiguration 類型的 Bean。

因此,我們只需要使用 Archaius 提供的某些功能,將 Apache 的這個抽象類的實現添加到我們的 Spring Context 中,Spring 的自動配置將自動將其添加到管理配置屬性中

為了保持簡單,我們將看到一個示例,其中我們配置一個類似於默認的 config.properties 文件的屬性,但其優先級高於 Spring 環境和應用程序屬性。

@Bean
public AbstractConfiguration addApplicationPropertiesSource() {
    URL configPropertyURL = (new ClassPathResource("other-config.properties")).getURL();
    PolledConfigurationSource source = new URLConfigurationSource(configPropertyURL);
    return new DynamicConfiguration(source, new FixedDelayPollingScheduler());
}

幸運的是,它考慮了我們可以幾乎無需任何努力設置的多個配置源。這些配置不在本入門教程的範圍內。

7. 結論

綜上所述,我們學習了 Archaius 以及它提供的利用配置管理的一些強大功能。

此外,我們還看到了 Spring Cloud 自配置庫的作用,它允許我們方便地使用該庫的 API。

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

發佈 評論

Some HTML is okay.