帶有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中讀取屬性。
- 依賴關係
讓我們將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.
庫定義源的優先順序是:
- 在上下文中定義的任何Apache Common Configuration
AbstractConfiguration
bean -
Autowired
SpringConfigurableEnvironment
定義的所有源 - 我們在上面的示例中看到了默認的Archaius來源
- Apache的
SystemConfiguration
和EnvironmentConfiguration
來源
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存儲庫中找到本教程中顯示的所有示例以及其他示例。