帶有Spring Cloud的Netflix Archaius簡介

1.概述

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

簡而言之,它是一個框架,可用於從許多不同的來源收集配置屬性,從而提供對它們的快速,線程安全的訪問。

最重要的是,該庫允許屬性在運行時動態更改,從而使系統無需重新啟動應用程序即可獲得這些變化。

在這個入門教程中,我們將建立一個簡單的Spring Cloud Archaius配置,我們將解釋幕後發生的事情,最後,我們將了解Spring如何允許擴展基本設置。

2. Netflix Archaius功能

眾所周知,Spring Boot已經提供了用於管理外部化配置的工具,那麼為什麼還要Archaius機制呢?

好吧, Archaius提供了一些方便而有趣的功能,而其他任何配置框架都沒有考慮到這些功能。它的一些關鍵點是:

  • 動態和類型屬性
  • 在屬性突變時被調用的回調機制
  • 動態配置源(如URL,JDBC和Amazon DynamoDB)的即用型實現
  • Spring Boot Actuator或JConsole可以訪問JMX MBean來檢查和操作屬性
  • 動態屬性驗證

這些好處在許多情況下都是有益的。

因此,Spring Cloud開發了一個可以輕鬆配置“ Spring Environment Bridge”的庫,以便Archaius可以從Spring Environment中讀取屬性。

  1. 依賴關係

讓我們將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。快速範例

默認情況下,它動態管理應用程序的classpath中名為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的值。

到目前為止沒什麼大不了的,對吧?好的,我們繼續更改類路徑文件中的屬性值,而無需重新啟動服務。結果,大約一分鐘後,對端點的調用應檢索新值。很酷,不是嗎?

接下來,我們將嘗試了解幕後情況。

5.如何運作?

首先,讓我們嘗試了解全局。

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

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

5.1 Netflix Archaius Library

它用於定義復合配置,複合配置是從不同來源獲得的各種配置的集合。

此外,其中一些配置源可能支持在運行時輪詢更改。 Archaius提供了接口和一些預定義的實現來配置這些類型的源。

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

最後, ConfigurationManager處理系統範圍的配置和部署上下文。它可以安裝最終的Composite Configuration,也可以檢索已安裝的Composite Configuration進行修改。

5.2。 Spring Cloud支持

Spring Cloud Archaius庫的主要任務是將所有不同的配置源合併為ConcurrentCompositeConfiguration並使用ConfigurationManager.安裝ConfigurationManager.

庫定義源的優先順序是:

  1. 在上下文中定義的任何Apache Common Configuration AbstractConfiguration bean
  2. Autowired Spring ConfigurableEnvironment定義的所有源
  3. 我們在上面的示例中看到了默認的Archaius來源
  4. Apache的SystemConfigurationEnvironmentConfiguration來源

Spring Cloud庫提供的另一個有用的功能是定義執行器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。

再一次,我們可以在Github存儲庫中找到本教程中顯示的所有示例以及其他示例。