Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird die Spring Cloud Azure-App Konfigurationsbibliothek beschrieben. Diese Bibliothek lädt Konfigurationen und Featurekennzeichnungen aus dem Azure-App-Konfigurationsdienst. Die Bibliothek generiert PropertySource Abstraktionen, die den bereits von der Spring-Umgebung generierten Abstraktionen entsprechen, wie z. B. Umgebungsvariablen, Befehlszeilenkonfigurationen, lokale Konfigurationsdateien usw.
Spring ist ein von VMware entwickeltes Open-Source-Anwendungsframework, das ein vereinfachtes, modulares Verfahren für die Erstellung von Java-Anwendungen bereitstellt. Spring Cloud Azure ist ein Open-Source-Projekt, das eine nahtlose Spring-Integration mit Azure-Diensten ermöglicht.
Voraussetzungen
- Azure-Abonnement (kostenloses Abonnement erstellen)
- Java Development Kit (JDK) Version 8 oder höher.
- Apache Maven
- Azure-Befehlszeilenschnittstelle
Einrichten Ihres App Configuration Store
Verwenden Sie den folgenden Befehl, um Ihren Azure-App Konfigurationsspeicher zu erstellen:
az appconfig create \
--resource-group <your-resource-group> \
--name <name-of-your-new-store> \
--sku Standard
Mit diesem Befehl wird ein neuer, leerer Konfigurationsspeicher erstellt. Sie können Ihre Konfigurationen mithilfe des folgenden Importbefehls hochladen:
az appconfig kv import \
--name <name-of-your-new-store> \
--source file \
--path <location-of-your-properties-file> \
--format properties \
--prefix /application/
Bestätigen Sie Ihre Konfigurationen, bevor Sie sie laden. Sie können YAML-Dateien hochladen, indem Sie das Format in YAML ändern. Das Präfixfeld ist wichtig, da es sich um das Standardpräfix handelt, das von der Clientbibliothek geladen wird.
Bibliotheksnutzung
Um das Feature in einer Anwendung zu verwenden, können Sie es als Spring Boot-Anwendung erstellen. Die bequemste Möglichkeit, die Abhängigkeit hinzuzufügen, ist mit dem Spring Boot Starter com.azure.spring:spring-cloud-azure-starter-appconfiguration-config. Im folgenden Beispiel für die Datei pom.xml wird Azure-App Configuration verwendet.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-version}</version>
<relativePath />
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-dependencies</artifactId>
<version>6.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-appconfiguration-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Das folgende Beispiel zeigt eine einfache Spring Boot-Anwendung mithilfe der App-Konfiguration:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
In diesem Beispiel enthält die Datei "application.properties " die folgende Zeile:
spring.config.import=azureAppConfiguration
spring.cloud.azure.appconfiguration.stores[0].endpoint=${CONFIG_STORE_ENDPOINT}
CONFIG_STORE_ENDPOINT ist eine Umgebungsvariable mit der Endpunkt-URL zu Ihrem Azure App Configuration Store.
Hinweis
Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden, der verfügbar ist. Der in diesem Verfahren beschriebene Authentifizierungsfluss, z. B. für Datenbanken, Caches, Nachrichten oder KI-Dienste, erfordert ein sehr hohes Vertrauen in die Anwendung und trägt Risiken, die in anderen Flüssen nicht vorhanden sind. Verwenden Sie diesen Fluss nur, wenn sicherere Optionen wie verwaltete Identitäten für kennwortlose oder schlüssellose Verbindungen nicht geeignet sind. Bei Vorgängen des lokalen Computers bevorzugen Sie Benutzeridentitäten für kennwortlose oder schlüssellose Verbindungen.
Falls keine Konfigurationen festgelegt sind, werden die Konfigurationen, die mit /application/ beginnen, standardmäßig mit (No Label) geladen, es sei denn, ein Spring Profile ist festgelegt. In diesem Fall entspricht die Standardbezeichnung Ihrem Spring Profile.
Eine benannte /application/https://<name-of-your-store>.azconfig.io/ Eigenschaftsquelle wird erstellt, die die Eigenschaften dieses Speichers enthält. Die in der Anfrage verwendete Bezeichnung wird an das Ende des Namens angehängt. Wenn keine Beschriftung festgelegt ist, ist das Zeichen \0 als leeres Leerzeichen vorhanden.
Konfiguration laden
Die Bibliothek unterstützt das Laden eines oder mehrerer App-Konfigurationsspeicher. In der Situation, in der ein Schlüssel in mehreren Stores dupliziert wird, gewinnt der letzte.
spring.cloud.azure.appconfiguration.stores[0].endpoint=[first-store-endpoint]
spring.cloud.azure.appconfiguration.stores[1].endpoint=[second-store-endpoint]
Wenn in diesem Beispiel beide Speicher denselben Konfigurationsschlüssel aufweisen, hat die Konfiguration im zweiten Speicher die höchste Priorität.
Hinweis
Sie können Azure App-Konfigurationseinstellungen wie jede andere Spring-Konfiguration verwenden. Weitere Informationen finden Sie in Core Features der Dokumentation zum Spring Boot oder Schnellstart: Erstellen einer Java Spring-App mit Azure App Configuration.
Auswählen von Konfigurationen
Die Bibliothek lädt Konfigurationen mit dem Schlüssel und der Bezeichnung. Standardmäßig werden die Konfigurationen geladen, die mit dem Schlüssel /application/ beginnen. Die Standardbezeichnung lautet \0, die wie (No Label) im Azure-Portal angezeigt wird. Wenn ein Federprofil festgelegt ist und keine Beschriftung angegeben wird, ist die Standardbezeichnung Ihr Federprofil, das heißt ${spring.profiles.active}.
Sie können konfigurieren, welche Konfigurationen geladen werden, indem Sie verschiedene Schlüssel- und Bezeichnungsfilter auswählen:
spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter=[my-key]
spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=[my-label]
Die key-filter Eigenschaft unterstützt die folgenden Filter:
| Schlüsselfilter | Wirkung |
|---|---|
* |
Entspricht einem beliebigen Schlüssel. |
abc |
Entspricht einem Schlüssel mit dem Namen abc. |
abc* |
Schlüsselbezeichnungen, die mit abc beginnen, abgleichen. |
abc,xyz |
Entspricht den Schlüsselnamen abc oder xyz. Auf fünf kommagetrennte Werte beschränkt. |
Die label-filter Eigenschaft unterstützt die folgenden Filter:
| Etikett | Beschreibung |
|---|---|
* |
Entspricht jeder Bezeichnung, einschließlich \0. |
\0 |
Passt zu null -Etiketten, die im Azure-Portal als (No Label) erscheinen. |
1.0.0 |
Exakte Übereinstimmung mit der Bezeichnung 1.0.0. |
1.0.* |
Entspricht Bezeichnungen, die mit 1.0.* beginnen. |
,1.0.0 |
Entspricht Bezeichnungen null und 1.0.0. Auf fünf kommagetrennte Werte beschränkt. |
Wenn Sie YAML mit Bezeichnungsfiltern verwenden und Konfigurationen ohne Bezeichnung und mehr Konfigurationen mit anderen Bezeichnungen laden möchten, müssen Sie eine leere ,. Beispiel: ,dev Übereinstimmungen \0 und dev. Geben Sie in diesem Fall den Beschriftungsfilter in einfache Anführungszeichen ein. Mit diesem Wert können Sie die Konfiguration ohne Bezeichnung zuerst laden, gefolgt von Konfigurationen mit bestimmten Bezeichnungen im selben Filter:
spring:
cloud:
azure:
appconfiguration:
stores:
- selects:
- label-filter: ',1.0.0'
Hinweis
Sie können * nicht mit , in Filtern kombinieren. In diesem Fall müssen Sie einen zusätzlichen Auswahlwert verwenden.
Wenn Sie im Bezeichnungsfilter verwenden * und mehrere Konfigurationen mit demselben Schlüssel geladen werden, werden sie in alphabetischer Reihenfolge geladen, und die Beschriftung wird in alphabetischer Reihenfolge verwendet.
Spring-Profile
Standardmäßig wird spring.profiles.active als label-filter für alle ausgewählten Konfigurationen festgelegt. Sie können diese Funktion mithilfe von label-filter überschreiben. Sie können die Spring-Profile im label-filter mit ${spring.profiles.active} verwenden, wie im folgenden Beispiel gezeigt:
spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=,${spring.profiles.active}
spring.cloud.azure.appconfiguration.stores[0].selects[1].label-filter=${spring.profiles.active}_local
Im ersten label-filterLädt die Bibliothek zunächst alle Konfigurationen mit der \0 Bezeichnung, gefolgt von allen Konfigurationen, die den Federprofilen entsprechen. Spring-Profile haben Vorrang vor den \0 Konfigurationen, da sie am Ende stehen.
Im zweiten label-filterWird die Zeichenfolge _local an das Ende der Federprofile angefügt, jedoch nur an das letzte Federprofil, wenn mehrere vorhanden sind.
Deaktivierte Geschäfte
Mit der Konfiguration spring.cloud.azure.appconfiguration.enabledkönnen Sie das Laden für alle Konfigurationsspeicher deaktivieren. Mit der spring.cloud.azure.appconfiguration.stores[0].enabled Konfiguration können Sie einen einzelnen Speicher deaktivieren.
Hinweis
Wenn Sie Gesundheitsmetriken verwenden, werden Ihre Stores weiterhin aufgelistet, aber mit dem Wert NOT LOADED. Wenn Sie geladene Eigenschaftenquellen überprüfen, werden sie weiterhin aufgelistet, enthalten aber keine Werte. Dieses Verhalten ist darauf zurückzuführen, dass die Eigenschaft spring.config.import festgelegt ist. Wenn azureAppConfiguration nicht für spring.config.import festgelegt ist, werden keine Werte angezeigt.
Authentifizierung
Die Bibliothek unterstützt alle Formen der Identität, die von der Azure Identity Library unterstützt werden. Sie können die Authentifizierung über die Konfiguration von Verbindungszeichenfolgen und verwalteten Identitäten durchführen.
Hinweis
Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden, der verfügbar ist. Der in diesem Verfahren beschriebene Authentifizierungsfluss, z. B. für Datenbanken, Caches, Nachrichten oder KI-Dienste, erfordert ein sehr hohes Vertrauen in die Anwendung und trägt Risiken, die in anderen Flüssen nicht vorhanden sind. Verwenden Sie diesen Fluss nur, wenn sicherere Optionen wie verwaltete Identitäten für kennwortlose oder schlüssellose Verbindungen nicht geeignet sind. Bei Vorgängen des lokalen Computers bevorzugen Sie Benutzeridentitäten für kennwortlose oder schlüssellose Verbindungen.
Verbindungszeichenfolge (nicht empfohlen)
Die Authentifizierung über eine Verbindungszeichenfolge ist die einfachste Form der Einrichtung, wird jedoch nicht empfohlen. Sie können auf die Verbindungszeichenfolge eines Stores zugreifen, indem Sie den folgenden Befehl verwenden:
az appconfig credential list --name <name-of-your-store>
Anschließend können Sie die Eigenschaft spring.cloud.azure.appconfiguration.stores[0].connection-string auf die Verbindungszeichenfolge festlegen. Bei Verwendung dieses Ansatzes wird dringend empfohlen, die Verbindungszeichenfolge in der lokalen Konfigurationsdatei auf einen Platzhalterwert festzulegen, der einer Umgebungsvariablen zugeordnet ist. Mit diesem Ansatz können Sie das Hinzufügen der Verbindungszeichenfolge zur Quellcodeverwaltung vermeiden.
Spring Cloud Azure Konfiguration
Sie können die Spring Cloud Azure-Konfiguration verwenden, um die Bibliothek zu konfigurieren. Zum Konfigurieren der Bibliothek können Sie die folgenden Eigenschaften verwenden:
spring.cloud.azure.appconfiguration.stores[0].endpoint= <URI-of-your-configuration-store>
Wenn nur der Endpunkt festgelegt ist, verwendet die Clientbibliothek die DefaultAzureCredential zum Authentifizieren.
Sie müssen die Identität zuweisen, die zum Lesen von Konfigurationen verwendet wird. Sie können diese Aufgabe mithilfe des folgenden Befehls erstellen:
az role assignment create \
--role "App Configuration Data Reader" \
--assignee <your-client-ID> \
--scope /subscriptions/<your-subscription>/resourceGroups/<your-stores-resource-group>/providers/Microsoft.AppConfiguration/configurationStores/<name-of-your-configuration-store>
Hinweis
Sie können nur eine Authentifizierungsmethode pro Endpunkt definieren: Verbindungszeichenfolge, vom Benutzer zugewiesene Identität oder Tokenanmeldeinformationen. Wenn Sie eine Mischung und Übereinstimmung benötigen, können Sie die ConfigurationClientCustomizer Zunutze ändernConfigurationClientBuilder, um verschiedene Methoden zu verwenden.
Hinweis
Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden, der verfügbar ist. Der in diesem Verfahren beschriebene Authentifizierungsfluss, z. B. für Datenbanken, Caches, Nachrichten oder KI-Dienste, erfordert ein sehr hohes Vertrauen in die Anwendung und trägt Risiken, die in anderen Flüssen nicht vorhanden sind. Verwenden Sie diesen Fluss nur, wenn sicherere Optionen wie verwaltete Identitäten für kennwortlose oder schlüssellose Verbindungen nicht geeignet sind. Bei Vorgängen des lokalen Computers bevorzugen Sie Benutzeridentitäten für kennwortlose oder schlüssellose Verbindungen.
Georeplikation
Die Bibliothek unterstützt das Georeplikationsfeature von Azure-App Konfiguration. Mit diesem Feature können Sie Ihre Daten an andere Speicherorte replizieren. Dieses Feature ist nützlich für hohe Verfügbarkeit und Notfallwiederherstellung.
Jedes Replikat, das Sie erstellen, verfügt über einen dedizierten Endpunkt. Wenn sich Ihre Anwendung an mehreren Geostandorten (Geolocations) befindet, können Sie jede Bereitstellung Ihrer Anwendung an einem Standort so aktualisieren, dass eine Verbindung mit dem Replikat hergestellt wird, das dem Standort näher liegt, wodurch die Netzwerkwartezeiten zwischen Ihrer Anwendung und App Configuration minimiert werden. Da jedes Replikat über ein separates Anforderungskontingent verfügt, hilft dieses Setup auch bei der Skalierbarkeit Ihrer Anwendung, während sie auf einen verteilten Dienst mit mehreren Regionen wächst.
Standardmäßig ermittelt die Bibliothek automatisch alle Replikate, die für einen Konfigurationsspeicher vorhanden sind. Wenn eine Anforderung an den bereitgestellten Speicher gestellt wird und ein Fehler auftritt, versucht die Bibliothek die Anforderung automatisch mit den verfügbaren Replikaten erneut.
Das Failover kann auftreten, wenn die Bibliothek eine der folgenden Bedingungen erfüllt:
- Empfängt Antworten mit dienstlosem Statuscode (HTTP 500 oder höher) von einem Endpunkt.
- Erfährt Netzwerkkonnektivitätsprobleme.
- Anforderungen werden gedrosselt (HTTP-Statuscode 429).
Nachdem der bereitgestellte Store wieder online ist, führt die Bibliothek automatisch eine Wiederholung der Anforderung für den bereitgestellten Store durch.
Wenn Sie das Failoververhalten steuern möchten, können Sie manuell eine Liste der Speicher bereitstellen, die für das Failover verwendet werden sollen.
spring.cloud.azure.appconfiguration.stores[0].endpoints[0]=[your primary store endpoint]
spring.cloud.azure.appconfiguration.stores[0].endpoints[1]=[your replica store endpoint]
oder
spring.cloud.azure.appconfiguration.stores[0].connection-strings[0]=[your primary store connection string]
spring.cloud.azure.appconfiguration.stores[0].connection-strings[1]=[your replica store connection string]
Wenn alle bereitgestellten Replikatendpunkte fehlschlagen, versucht die Bibliothek, eine Verbindung mit automatisch ermittelten Replikaten des primären Speichers herzustellen.
Sie können die Replikation mit der Einstellung spring.cloud.azure.appconfiguration.stores[0].replica-discovery-enabled=falsedeaktivieren.
Erstellen eines Konfigurationsspeichers mit Georeplikation
Um ein Replikat Ihres Konfigurationsspeichers zu erstellen, können Sie die Azure CLI oder die Azure-Portal verwenden. Im folgenden Beispiel wird die Azure CLI verwendet, um ein Replikat in der Region Ost-USA 2 zu erstellen:
az appconfig replica create --location --name --store-name [--resource-group]
Schlüsselwerte
Azure-App Configuration unterstützt mehrere Typen von Schlüsselwerten, von denen einige spezielle Features enthalten. Azure-App Configuration bietet integrierte Unterstützung für den JSON-Inhaltstyp, Springplatzhalter und Key Vault-Verweise.
Platzhalter
Die Bibliothek unterstützt Konfigurationen mit Umgebungsplatzhaltern im Stil von ${}. Wenn Sie auf einen Azure-App Konfigurationsschlüssel mit einem Platzhalter verweisen, entfernen Sie Präfixe aus dem Verweis. Beispielsweise wird /application/config.message als ${config.message} referenziert.
Hinweis
Das präfix, das entfernt wird, entspricht dem Wert spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter. Das präfix, das gekürzt wird, kann durch Festlegen eines Werts für spring.cloud.azure.appconfiguration.stores[0].trim-key-prefix[0].
JSON
Konfigurationen mit einem Inhaltstyp application/json werden als JSON-Objekte verarbeitet. Mit diesem Feature können Sie eine Konfiguration einem komplexen Objekt innerhalb eines @ConfigurationPropertiesObjekts zuordnen. Betrachten Sie beispielsweise den JSON-Schlüssel /application/config.colors mit dem folgenden Wert:
{
"Red": {
"value": [255, 0, 0]
},
"Blue": {
"value": [0, 255, 0]
},
"Green": {
"value": [0, 0, 255]
}
}
Dieser Schlüssel ist dem folgenden Code zugeordnet:
@ConfigurationProperties(prefix = "config")
public class MyConfigurations {
private Map<String, Color> colors;
}
Key Vault-Verweise
Azure-App Konfiguration und deren Bibliotheken unterstützen das Verweisen auf geheime Schlüssel, die im Key Vault gespeichert sind. In der App-Konfiguration können Sie Schlüssel mit Werten erstellen, die geheimen Schlüsseln zugeordnet sind, die in einem Key Vault gespeichert sind. Geheime Schlüssel bleiben im Key Vault sicher, aber Sie können auf die gleiche Weise wie jede andere Konfiguration beim Laden der App darauf zugreifen.
Ihre Anwendung verwendet den Clientanbieter, um Key Vault-Verweise abzurufen, genau wie für alle anderen schlüssel, die in der App-Konfiguration gespeichert sind. Da der Client die Schlüssel als Key Vault-Verweise erkennt, verfügt er über einen eindeutigen Inhaltstyp, und der Client stellt eine Verbindung mit Key Vault bereit, um seine Werte für Sie abzurufen.
Hinweis
Key Vault erlaubt nur den Abruf einzelner Geheimnisse, so dass jede in der App-Konfiguration gespeicherte Key Vault-Referenz zu einem Abruf von Key Vault führt.
Erstellen von Key Vault-Verweisen
Sie können im Azure-Portal einen Key Vault-Verweis erstellen, indem Sie zum Configuration Explorer navigieren und dann > sowie Key Vault-Verweis auswählen. Sie können dann ein Geheimnis auswählen, das Sie aus einem der Key Vaults, auf die Sie Zugriff haben, referenzieren möchten. Sie können auch beliebige Key Vault-Verweise auf der Registerkarte "Eingabe" erstellen. Geben Sie im Azure-Portal einen gültigen URI ein.
Sie können auch einen Key Vault-Verweis über die Azure CLI erstellen, indem Sie den folgenden Befehl verwenden:
az appconfig kv set-keyvault \
--name <name-of-your-store> \
--key <key-name> \
--secret-identifier <URI-to-your-secret>
Sie können jeden geheimen Bezeichner über die Azure CLI erstellen. Geheime Bezeichner erfordern lediglich das Format {vault}/{collection}/{name}/{version?} , in dem der Versionsabschnitt optional ist.
Verwenden von Key Vault-Verweisen
Sie können die Spring Cloud Azure-Konfiguration verwenden, um die Bibliothek zu konfigurieren. Sie können dieselben Anmeldeinformationen verwenden, die Sie für die Verbindung zu App Configuration genutzt haben, um Azure Key Vault zu verbinden.
Sie können auch eine SecretClientCustomizer gleiche Weise erstellen wie eine ConfigurationClientCustomizer , um Ihre eigene Authentifizierungsmethode bereitzustellen.
Nicht im Key Vault gespeicherte Geheimnisse auflösen
Die App-Konfigurationsbibliothek bietet eine Methode zum Überschreiben der Auflösung von Schlüsseltresorverweisen. Sie können es beispielsweise verwenden, um geheime Schlüssel in einer Entwicklungsumgebung lokal aufzulösen. Diese Auflösung erfolgt über das KeyVaultSecretProvider. Der KeyVaultSecretProvider, sofern angegeben, wird für jeden Schlüsseltresorverweis aufgerufen. Wenn getSecret ein Wert ungleich NULL zurückgegeben wird, wird er als geheimer Wert verwendet. Andernfalls wird die Schlüsseltresorreferenz normal aufgelöst.
public class MySecretProvider implements KeyVaultSecretProvider {
@Override
public String getSecret(String uri) {
...
}
}
Funktionsverwaltung
Die Featureverwaltung bietet eine Möglichkeit für Spring Boot-Anwendungen, dynamisch auf Inhalte zuzugreifen. Die Featureverwaltung verfügt über verschiedene Funktionen, z. B. die folgenden Funktionen:
- Featurekennzeichnungen, die Inhalte aktivieren oder deaktivieren können
- Featurefilter für die Zielgruppenadressierung, wenn Inhalte angezeigt werden
- Angepasste Funktionsfilter
- Feature Gates zur dynamischen Aktivierung von Endpunkten
Sie können Featurekennzeichnungen über die folgende Konfiguration aktivieren:
spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled= true
Aktivierte Featurekennzeichnungen werden mit dem Präfix feature-managementin das Spring-Konfigurationssystem geladen. Sie können Featurekennzeichnungen auch in der lokalen Konfigurationsdatei registrieren. Weitere Informationen finden Sie im Abschnitt "Featurekennzeichnungsdeklaration ".
Die einfachste Möglichkeit zur Verwendung des Feature-Managements ist die Nutzung der spring-cloud-azure-feature-management und spring-cloud-azure-feature-management-web Bibliotheken. Der Unterschied zwischen den beiden Bibliotheken besteht darin, dass spring-cloud-azure-feature-management-web eine Abhängigkeit von den spring-web und spring-webmvc Bibliotheken hat, um weitere Features wie Feature-Gates hinzuzufügen.
Standardmäßig werden alle Featurekennzeichnungen mit einer \0 Bezeichnung geladen, die als (No Label)" bezeichnet" angezeigt wird. Sie können die Feature-Kennzeichnungen konfigurieren, die geladen werden, indem Sie einen Bezeichnungsfilter festlegen, wie im folgenden Beispiel gezeigt wird:
spring.cloud.azure.appconfiguration.stores[0].feature-flags.selects[0].key-filter=A*
spring.cloud.azure.appconfiguration.stores[0].feature-flags.selects[0].label-filter= dev
Grundlagen der Featureverwaltung
Featureflags
Featurekennzeichnungen bestehen aus mehreren Teilen, einschließlich eines Namens und einer Liste von Featurefiltern, die zum Aktivieren des Features verwendet werden. Featurekennzeichnungen können entweder einen booleschen Status von "Ein" oder "Aus" aufweisen, oder sie können eine Liste mit Featurefiltern enthalten. Merkmalsflags werten Merkmalsfilter aus, bis einer truezurückgibt. Wenn kein Featurefilter true ergibt, wird dann das Feature-Flag false zurückgegeben.
Feature-Filter
Featurefilter definieren ein Szenario, für das ein Feature aktiviert werden soll. Featurefilter werden synchron ausgewertet.
Die Featureverwaltungsbibliothek enthält vier vordefinierte Filter: AlwaysOnFilter, PercentageFilter, TimeWindowFilter und TargetingFilter.
Sie können benutzerdefinierte Featurefilter erstellen. Sie können z. B. einen Featurefilter verwenden, um Kunden, die einen Microsoft Edge-Browser verwenden, eine benutzerdefinierte Benutzeroberfläche bereitzustellen. Sie können die Features in diesem Featurefilter anpassen, um z. B. eine bestimmte Kopfzeile für die Microsoft Edge-Browsergruppe anzuzeigen.
Featureflagdeklaration
Die Featureverwaltungsbibliothek unterstützt die Azure App-Konfiguration zusammen mit application.yml oder application.properties als Quellen für Featurekennzeichnungen. Hier sehen Sie ein Beispiel für das Format, das zum Einrichten von Featurekennzeichnungen in einer application.yml Datei verwendet wird:
feature-management:
feature_flags:
- id: feature-t
enabled: false
- id: feature-u
conditions:
client_filters:
- name: Random
- id: feature-v
conditions:
client_filters:
- name: TimeWindowFilter
parameters:
Start: "Wed, 01 May 2019 13:59:59 GMT"
End: "Mon, 01 July 2019 00:00:00 GMT"
- id: feature-w
evaluate: false
conditions:
client_filters:
- name: AlwaysOnFilter
Dieses Beispiel weist die folgenden Featurekennzeichnungen auf:
-
feature-tist auffalseeingestellt. Diese Einstellung gibt immer den Wert des Funktionsflags zurück. -
feature-uwird mit Featurefiltern verwendet. Diese Filter werden unter derenabled-forEigenschaft definiert. In diesem Fallfeature-uhat ein Featurefilter namensRandom, der keine Konfiguration erfordert, sodass nur die Namenseigenschaft erforderlich ist. -
feature-vgibt einen Featurefilter mit dem NamenTimeWindowFilteran. Mit diesem Funktionsfilter können Parameter übergeben werden, die als Konfiguration verwendet werden. In diesem Beispiel übergibt einTimeWindowFilter, die Start- und Endzeiten, in denen das Feature aktiv ist. -
feature-wwird für dieAlwaysOnFilterverwendet, die immer zutrueausgewertet wird. DasevaluateFeld wird verwendet, um die Auswertung der Featurefilter zu beenden, und führt dazu, dass der Featurefilter immer zurückgegeben wirdfalse.
Auswerten von Merkmalsauszeichnungen
Die spring-cloud-azure-feature-management Bibliothek stellt FeatureManager bereit, um zu bestimmen, ob ein Feature-Flag aktiviert ist.
FeatureManager bietet eine asynchrone Möglichkeit zum Überprüfen des Status der Kennzeichnung.
spring-cloud-azure-feature-management-web enthält zusammen mit der Bereitstellung von FeatureManager das FeatureManagerSnapshot, das den Status der zuvor ausgewerteten Feature-Flags im @RequestScope zwischenspeichert, um sicherzustellen, dass alle Anforderungen denselben Wert zurückgeben. Darüber hinaus stellt die Webbibliothek bereit @FeatureGate, die Webanforderungen entweder blockieren oder an verschiedene Endpunkte umleiten kann.
Überprüfen von Featureflags
FeatureManager ist ein @Bean, das @Autowired oder in Objekte vom Typ @Component injiziert werden kann.
FeatureManager verfügt über eine Methode isEnabled , die beim Übergeben des Namens eines Featureflags den Status zurückgibt.
@Autowired
FeatureManager featureManager;
...
if (featureManager.isEnabled("feature-t")) {
// Do Something
}
Hinweis
FeatureManager verfügt außerdem über eine asynchrone Version von isEnabled, namens isEnabledAsync.
Ohne Featureverwaltungskonfiguration oder wenn das Feature-Flag nicht vorhanden ist, isEnabled wird immer zurückgegeben false. Wenn ein vorhandenes Feature-Flag mit einem unbekannten Featurefilter konfiguriert ist, wird ein FilterNotFoundException Fehler ausgelöst. Sie können dieses Verhalten ändern, damit false zurückgegeben wird, indem Sie fail-fast zu false konfigurieren. Die folgende Tabelle beschreibt fail-fast:
| Name | Beschreibung | Erforderlich | Standard |
|---|---|---|---|
spring.cloud.azure.feature.management.fail-fast |
Wenn eine Ausnahme auftritt, wird ein RuntimeException ausgelöst. Wenn diese Eigenschaft auf false festgelegt ist, wird isEnabled stattdessen false zurückgegeben. |
Nein | true |
Der einzige Unterschied zwischen FeatureManagerSnapshot und FeatureManager ist das Zwischenspeichern von Ergebnissen in der @RequestScope.
Merkmal Tor
Mit der Featureverwaltungswebbibliothek können Sie festlegen, dass ein bestimmtes Feature aktiviert ist, um einen Endpunkt auszuführen. Sie können diese Anforderung mithilfe der @FeatureGate Anmerkung einrichten, wie im folgenden Beispiel gezeigt:
@GetMapping("/featureT")
@FeatureGate(feature = "feature-t")
@ResponseBody
public String featureT() {
...
}
Sie können nur auf den featureT Endpunkt zugreifen, wenn "feature-t" aktiviert ist.
Deaktivierte Aktionsbehandlung
Wenn ein Endpunkt blockiert wird, weil das von ihm festgelegte Feature deaktiviert ist, wird DisabledFeaturesHandler aufgerufen. Standardmäßig wird ein HTTP 404 zurückgegeben. Sie können dieses Verhalten außer Kraft setzen, indem Sie das folgende Beispiel implementieren DisabledFeaturesHandler:
@Component
public class MyDisabledFeaturesHandler implements DisabledFeaturesHandler {
@Override
public HttpServletResponse handleDisabledFeatures(HttpServletRequest request, HttpServletResponse response) {
...
return response;
}
}
Routenführung
Bestimmte Routen können Anwendungsfunktionen verfügbar machen, die von Features abgesperrt sind. Wenn ein Feature deaktiviert ist, können Sie diese Routen an einen anderen Endpunkt umleiten, wie im folgenden Beispiel gezeigt:
@GetMapping("/featureT")
@FeatureGate(feature = "feature-t" fallback= "/oldEndpoint")
@ResponseBody
public String featureT() {
...
}
@GetMapping("/oldEndpoint")
@ResponseBody
public String oldEndpoint() {
...
}
Integrierte Featurefilter
Es gibt einige Featurefilter, die im spring-cloud-azure-feature-management Paket enthalten sind. Diese Featurefilter werden automatisch hinzugefügt.
AlwaysOnFilter
Dieser Filter gibt immer zurück true. Ein Verwendungsbeispiel finden Sie im Abschnitt "Featurekennzeichnungsdeklaration ".
Prozentsatzfilter
Jedes Mal, wenn sie überprüft wird, kann die Auswertung PercentageFilter ein anderes Ergebnis zurückgeben. Sie können diese Inkonsistenz umgehen, indem Sie das FeatureManagementSnapshotErgebnis des Featureflags pro Anforderung zwischenspeichern.
feature-management:
feature_flags:
- name: feature-v
conditions:
client_filters:
- name: PercentageFilter
parameters:
Value: 50
ZeitFensterFilter
Dieser Filter bietet die Möglichkeit, ein Feature basierend auf einem Zeitfenster zu aktivieren. Wenn Sie nur End angeben, wird die Funktion bis zu diesem Zeitpunkt als aktiv betrachtet. Wenn Sie nur Start angeben, wird das Feature ab diesem Zeitpunkt als aktiviert betrachtet. Wenn Sie beide angeben, wird das Feature zwischen den beiden Zeiten als gültig betrachtet.
feature-management:
feature_flags:
- name: feature-v
conditions:
client_filters:
- name: TimeWindowFilter
parameters:
Start: "Wed, 01 May 2019 13:59:59 GMT"
End: "Mon, 01 July 2019 00:00:00 GMT"
Dieser Filter unterstützt auch Filter für wiederkehrende Zeitfenster. Sie unterstützt sowohl tägliche als auch wöchentliche Wiederholungen sowie eine Ablaufzeit.
feature-management:
feature_flags:
- name: feature-v
conditions:
client_filters:
- name: TimeWindowFilter
parameters:
Start: "Mon, 01 July 2019 00:00:00 GMT"
End: "Mon, 01 July 2019 12:00:00 GMT"
Recurrence:
Pattern:
Type: Weekly
Interval: 1
FirstDayOfWeek: Sunday
DaysOfWeek:
- Monday
- Wednesday
Dieses Serienmuster erfolgt jede Woche montags und mittwochs von 00:00:00 GMT bis 12:00:00 GMT und läuft nicht ab.
feature-management:
feature_flags:
- name: feature-v
conditions:
client_filters:
- name: TimeWindowFilter
parameters:
Start: "Mon, 01 July 2019 00:00:00 GMT"
End: "Mon, 01 July 2019 12:00:00 GMT"
Recurrence:
Pattern:
Type: Daily
Interval: 2
Range:
Type: EndDate
EndDate: "Fri, 15 Aug 2025 07:00:00 GMT"
Dieses Serienmuster findet jeden anderen Tag von 00:00:00 GMT bis 12:00:00 GMT bis zum Enddatum statt.
TargetingFilter
Dieser Filter bietet die Möglichkeit, ein Feature für eine Zielgruppe zu aktivieren. Eine ausführliche Erläuterung der Zielbestimmung finden Sie im Abschnitt "Zielbestimmung" . Die Filterparameter enthalten ein Benutzergruppenobjekt, das Benutzer, Gruppen und einen Standardprozentsatz der Benutzerbasis beschreibt, die Zugriff auf das Feature haben soll. Für jedes Gruppenobjekt, das in der Zielgruppe aufgeführt ist, ist ein Prozentsatz erforderlich, der den Prozentsatz der Mitglieder dieser Gruppe definiert, die Zugriff auf das Feature haben. Ein Benutzer hat das Feature in den folgenden Fällen aktiviert:
- Der Benutzer wird direkt im Abschnitt "Benutzer" angegeben.
- Der Benutzer befindet sich in dem Prozentsatz, der in einem der Gruppen-Rollouts enthalten ist.
- Der Benutzer fällt in den Standard-Rollout-Prozentsatz.
feature-management:
feature_flags:
- name: target
conditions:
client_filters:
- name: targetingFilter
parameters:
users:
- Jeff
- Alicia
groups:
- name: Ring0
rollout-percentage: 100
- name: Ring1
rolloutPercentage: 100
default-rollout-percentage: 50
Benutzerdefinierte Funktionsfilter
Das Erstellen eines benutzerdefinierten Featurefilters bietet eine Möglichkeit, Features basierend auf von Ihnen definierten Kriterien zu aktivieren. Zum Erstellen eines benutzerdefinierten Featurefilters müssen Sie die FeatureFilter Schnittstelle implementieren.
FeatureFilter hat eine einzelne Methode evaluate. Wenn ein Feature angibt, dass es mit einem Featurefilter aktiviert werden kann, wird die evaluate Methode aufgerufen. Wenn evaluatetrue zurückgegeben wird, bedeutet dies, dass das Feature aktiviert werden soll. Wenn er falsezurückgibt, fährt er mit der Auswertung der Merkmalsfilter fort, bis einer truezurückgibt. Wenn alle Filter den Wert false zurückgeben, ist die Funktion ausgeschaltet.
Featurefilter werden als Spring Beans definiert, daher sind sie entweder als @Component oder in einer @Configuration definiert.
@Component("Random")
public class Random implements FeatureFilter {
@Override
public boolean evaluate(FeatureFilterEvaluationContext context) {
double chance = Double.valueOf((String) context.getParameters().get("chance"));
return Math.random() > chance / 100;
}
}
Parametrisierte Featurefilter
Einige Featurefilter erfordern Parameter, um zu bestimmen, ob ein Feature aktiviert werden soll. Beispielsweise kann ein Browserfeaturefilter ein Feature für eine bestimmte Gruppe von Browsern aktivieren. Möglicherweise möchten Sie ein Feature, das für Microsoft Edge- und Chrome-Browser aktiviert ist, aber nicht Firefox. Um diese Situation einzurichten, können Sie einen Funktionsfilter entwerfen, der Parameter erwartet. Diese Parameter werden in der Featurekonfiguration und im Code angegeben und werden über den FeatureFilterEvaluationContext Parameter von evaluate zugänglich sein.
FeatureFilterEvaluationContext hat eine Eigenschaft parameters, die ein Map<String, Object> ist.
Zielbestimmung
Die Zielbestimmung ist eine Featureverwaltungsstrategie, mit der Entwickler neue Features schrittweise für ihre Benutzerbasis bereitstellen können. Die Strategie basiert auf dem Konzept der Zielgruppenadressierung einer Gruppe von Benutzern, die als Zielgruppe bezeichnet werden. Eine Benutzergruppe besteht aus bestimmten Benutzern, Gruppen und einem bestimmten Prozentsatz der gesamten Benutzerbasis. Die Gruppen, die in der Zielgruppe enthalten sind, können weiter in Prozentsätze ihrer Gesamtmitglieder unterteilt werden.
Die folgenden Schritte veranschaulichen ein Beispiel für ein progressives Rollout für ein neues Feature „Beta“:
- Individuelle Benutzer Jeff und Alicia erhalten Zugriff auf die Betaversion.
- Ein anderer Benutzer, Mark, fordert die Anmeldung an und wird aufgenommen.
- Zwanzig Prozent einer Gruppe, die als „Ring1“-Benutzer bezeichnet wird, sind in der Betaversion enthalten.
- Die Anzahl der in der Betaversion enthaltenen „Ring1“-Benutzer wird auf 100 Prozent erhöht.
- Fünf Prozent der Benutzerbasis sind in der Betaversion enthalten.
- Der Rollout-Prozentsatz wird auf 100 Prozent erhöht, und das Feature wird vollständig eingeführt.
Diese Strategie für das Rollout eines Features ist über den enthaltenen TargetingFilter Featurefilter in die Bibliothek integriert.
Zielbestimmung in einer Anwendung
Eine Beispielwebanwendung, die den Zielfeaturefilter verwendet, ist im Beispielprojekt verfügbar.
Um den TargetingFilter in einer Anwendung zu verwenden, müssen Sie ihn als @Bean wie jeden anderen Funktionsfilter hinzufügen.
TargetingFilter basiert auf einem anderen @Bean , das der Anwendung TargetingContextAccessorhinzugefügt werden soll. Das TargetingContextAccessor ermöglicht das Definieren des aktuellen TargetingContext, das zum Festlegen der aktuellen Benutzer-ID und -Gruppen verwendet werden soll, wie im folgenden Beispiel gezeigt:
public class MyTargetingContextAccessor implements TargetingContextAccessor {
@Override
public void configureTargetingContext(TargetingContext context) {
context.setUserId("Jeff");
ArrayList<String> groups = new ArrayList<String>();
groups.add("Ring0");
context.setGroups(groups);
}
}
Gezielte Bewertungsmöglichkeiten
Optionen stehen zur Verfügung, um anzupassen, wie die Zielauswertung in einem bestimmten Bereich TargetingFilterdurchgeführt wird. Sie können während der Erstellung von TargetingEvaluationOptions einen optionalen Parameter TargetingFilter festlegen.
@Bean
public TargetingFilter targetingFilter(MyTargetingContextAccessor contextAccessor) {
return new TargetingFilter(contextAccessor, new TargetingEvaluationOptions().setIgnoreCase(true));
}
Konfigurationsaktualisierung
Wenn Sie die Konfigurationsaktualisierung für Ihre Konfigurationen aktivieren, können Sie die neuesten Werte aus Ihrem App-Konfigurationsspeicher oder -stores abrufen, ohne die Anwendung neu starten zu müssen.
Um die Aktualisierung zu aktivieren, müssen Sie die Überwachung zusammen mit den Überwachungsauslösern aktivieren. Ein Überwachungstrigger ist ein Schlüssel mit einer optionalen Bezeichnung, die das System auf Wertänderungen überwacht, um Aktualisierungen auszulösen. Der Wert des Überwachungstriggers kann ein beliebiger Wert sein, solange er sich ändert, wenn eine Aktualisierung erforderlich ist.
Hinweis
Jeder Vorgang, der das ETag eines Überwachungstriggers ändert, verursacht eine Aktualisierung, z. B. eine Inhaltstypänderung.
spring:
cloud:
azure:
appconfiguration:
stores:
- monitoring:
enabled: true
triggers:
- key: [my-watched-key]
label: [my-watched-label]
Um eine Konfigurationsaktualisierung auszulösen, ändern Sie den Wert eines Schlüssels in Ihrem Konfigurationsspeicher. Aktualisieren Sie dann einen der Uhrenschlüssel auf einen neuen Wert. Diese Änderung löst die Erstellung eines Protokolls aus. Beispielsweise führt das Ändern des Wertes von /application/config.message zu folgender Log-Meldung:
INFO 17496 --- [TaskScheduler-1] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [config.message]
Nachdem die Anwendung das Protokoll erstellt hat, aktualisiert sie alle @Beans im Aktualisierungsbereich.
Hinweis
Standardmäßig sind @ConfigurationProperties -kommentierte Beans in diesem Bereich enthalten.
Pull-basierte Aktualisierung
Die Spring-Bibliotheken der App-Konfiguration unterstützen die Möglichkeit, in einem Aktualisierungsintervall regelmäßig zu prüfen, ob Änderungen an den Überwachungsauslösern vorgenommen wurden. Standardmäßig ist das Aktualisierungsintervall auf 30 Sekunden festgelegt. Nachdem das Aktualisierungsintervall bestanden wurde, werden alle Auslöser beim Ausführen eines Aktualisierungsversuchs im angegebenen Speicher auf Änderungen eingecheckt. Jede Änderung an dem Schlüssel bewirkt, dass eine Aktualisierung ausgelöst wird. Da die Bibliotheken in das Spring-Aktualisierungssystem integriert sind, lädt jede Aktualisierung alle Konfigurationen aus allen Stores neu. Sie können das Aktualisierungsintervall auf ein beliebiges Intervall festlegen, das länger als 1 Sekunde ist. Die unterstützten Einheiten für das Aktualisierungsintervall sind s, mhund d für Sekunden, Minuten, Stunden und Tage. Im folgenden Beispiel wird das Aktualisierungsintervall auf 5 Minuten festgelegt:
spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 5m
Automatisiert
Wenn Sie die spring-cloud-azure-appconfiguration-config-web Bibliothek verwenden, sucht die Anwendung automatisch nach einer Aktualisierung, wenn eine Servlet-Anforderung auftritt, insbesondere ServletRequestHandledEvent. Der häufigste Weg, auf die dieses Ereignis gesendet wird, sind Anforderungen an Endpunkte in einer @RestController.
Handbuch
In Anwendungen, die nur spring-cloud-azure-appconfiguration-config verwenden, z. B. Konsolenanwendungen, können Sie eine Aktualisierung manuell durch Aufrufen der AppConfigurationRefresh-Methode von refreshConfiguration auslösen.
AppConfigurationRefresh ist ein @Bean, das Sie in jedes beliebige @Component einfügen können.
Da die Bibliothek das Spring-Konfigurationssystem verwendet, führt das Auslösen einer Aktualisierung auch zu einer Aktualisierung aller Konfigurationen, nicht nur zum Neuladen der Konfigurationen aus Ihrem Azure App Configuration Store.
Pushbasierte Aktualisierung (nicht empfohlen)
Hinweis
Diese Methode wird nicht mehr empfohlen, wird aber derzeit noch unterstützt.
Sie können die spring-cloud-azure-appconfiguration-config-web Bibliothek so einrichten, dass Pushbenachrichtigungen aus Ihrem Azure App-Konfigurationsspeicher empfangen werden, um Ihre Konfigurationswerte zu aktualisieren. Sie können diese Konfiguration über einen Azure Event Grid Web Hook einrichten, den Sie konfigurieren können, um Benachrichtigungen über Änderungen an bestimmte Schlüssel zu senden. Durch Hinzufügen der Spring-Aktorbibliothek als Abhängigkeit können Sie die Aktualisierungsendpunkte der App-Konfiguration verfügbar machen. Es gibt zwei verschiedene Endpunkte: appconfiguration-refresh und appconfiguration-refresh-bus. Diese Endpunkte funktionieren ähnlich wie ihre Gegenstücke refresh und refresh-bus, wo die App-Konfigurationsendpunkte das Aktualisierungsintervall ablaufen, anstatt eine Aktualisierung beim Empfang zu erzwingen. Sie können refresh und refresh-bus weiterhin verwenden, aber Sie können sie nicht direkt mit Azure Event Grid über einen Webhook verbinden, da im Setup eine Antwort erforderlich ist.
Die appconfiguration-refresh-Eigenschaft beendet das Aktualisierungsintervall, sodass das verbleibende Aktualisierungsintervall nicht abgewartet wird, bevor die nächste Aktualisierungsprüfung erfolgt. Die appconfiguration-refresh-bus-Eigenschaft sendet eine Benachrichtigung an einen verbundenen Messagingdienst, wie etwa Azure Service Bus, um alle Instanzen einer Anwendung aufzufordern, sich zu aktualisieren. In beiden Fällen läuft sie nicht vollständig im Aktualisierungsintervall ab, ist aber um einen kleinen Jitterbetrag deaktiviert. Dieser Jitter stellt sicher, dass jede Instanz Ihrer Anwendung nicht gleichzeitig versucht, zu aktualisieren.
management.endpoints.web.exposure.include= appconfiguration-refresh, appconfiguration-refresh-bus
Zusätzlich zum Verfügbarmachen der Aktualisierungsendpunkte erfordert die Bibliothek einen Abfrageparameter für die Sicherheit. Standardmäßig ist kein Tokenname oder -wert vorhanden, Sie müssen jedoch einen für die Verwendung der Endpunkte festlegen, wie im folgenden Beispiel gezeigt:
spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.name=[primary-token-name]
spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.secret=[primary-token-secret]
spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.secondary-token.name=[secondary-token-name]
spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.secondary-token.secret=[secondary-token-secret]
Einrichten von Web-Hooks
Um einen Webhook einzurichten, öffnen Sie Ihren Azure App Konfigurationsspeicher und wählen Sie Ereignisse im Navigationsmenü aus. Wählen Sie dann "Ereignisabonnement" aus. Legen Sie den Namen Ihres Ereignisses fest, und wählen Sie den Endpunkttyp als Web Hook aus. Wenn Sie Web Hook auswählen, wird eine Endpunktoption angezeigt. Klicken Sie auf Endpunkt auswählen. Ihr Endpunkt sollte wie im folgenden Beispiel aussehen: https://www.myaplication.com/actuator/appconfiguration-refresh?myTokenName=mySecret.
Auswahl bestätigen sendet eine Setup-Benachrichtigung an die angegebene URI und erwartet eine Antwort. Wenn keine Antwort zurückgegeben wird, schlägt das Setup fehl. Das azure-spring-cloud-appconfiguration-web Bibliothekssetup für Endpunkte gibt die richtige Antwort zurück, wenn der Azure-App Konfigurationsspeicher für die Anwendung konfiguriert ist. Diese Bestätigung kann auf andere Weise gesendet werden. Weitere Informationen zur Webhook-Übermittlung finden Sie unter Webhook-Ereignisübermittlung.
Hinweis
Diese Überprüfung erfolgt nur bei der Erstellung oder Änderung des Endpunkts.
Es wird dringend empfohlen, Filter einzurichten, da andernfalls nach jeder Schlüsselerstellung und -änderung eine Aktualisierung ausgelöst wird.
Erzwungene Clientaktualisierung
Sie können die Bibliothek so konfigurieren, dass eine Aktualisierung aller Konfigurationen in einem Aktualisierungsintervall erzwungen wird. In der folgenden Tabelle wird die refresh-interval Eigenschaft beschrieben:
| Name | Beschreibung | Erforderlich | Standard |
|---|---|---|---|
spring.cloud.azure.appconfiguration.refresh-interval |
Die Standardzeit zwischen Aktualisierungen. Ist ein Duration. |
Nein | NULL |
Das Aktualisieren mit spring.cloud.azure.appconfiguration.refresh-interval prüft keine konfigurierten Überwachungsschlüssel. Diese Eigenschaft wird verwendet, um sicherzustellen, dass die Geheimnisse im Schlüsseltresor aktualisiert bleiben, da die Azure-App-Konfiguration nicht erkennen kann, wann sie aktualisiert werden.
Da Azure Key Vault das öffentliche und private Schlüsselpaar eines Zertifikats als geheimes Zertifikat speichert, kann Ihre Anwendung jedes Zertifikat als Key Vault-Referenz in der App-Konfiguration abrufen. Da Zertifikate regelmäßig erneuert werden müssen, müssen Clientanwendungen in genauso kurzen Abständen aktualisiert werden, was mithilfe des Clientaktualisierungsintervalls erfolgen kann.
Merkmal Flagge aktualisieren
Wenn Featurekennzeichnungen und -überwachungen aktiviert sind, wird standardmäßig das Aktualisierungsintervall für Featurekennzeichnungen auf 30 Sekunden festgelegt. Wenn das Aktualisierungsintervall endet, überprüft das System alle Featurekennzeichnungen im angegebenen Speicher auf Änderungen. Jede Änderung an dem Schlüssel bewirkt, dass eine Aktualisierung ausgelöst wird. Da die Bibliotheken in das Spring-Aktualisierungssystem integriert sind, lädt jede Aktualisierung alle Konfigurationen aus allen Stores neu. Sie können das Aktualisierungsintervall auf ein beliebiges Intervall festlegen, das länger als 1 Sekunde ist. Die unterstützten Einheiten für das Aktualisierungsintervall sind s, mhund d für Sekunden, Minuten, Stunden und Tage. Im folgenden Beispiel wird das Aktualisierungsintervall auf 5 Minuten festgelegt:
spring.cloud.azure.appconfiguration.stores[0].monitoring.feature-flag-refresh-interval= 5m
Gesundheitsindikator
Die Client-Bibliothek verfügt über eine Zustandsanzeige, die prüft, ob die Verbindung zum Azure App Configuration Store oder zu den Stores intakt ist. Wenn sie für jeden Speicher aktiviert ist, erhält er einen der folgenden Statuswerte:
- UP : Die letzte Verbindung war erfolgreich.
- DOWN- Die letzte Verbindung führte zu einem Fehlercode ungleich 200. Dieser Status kann auf Probleme zurückzuführen sein, die von ablaufenden Anmeldeinformationen bis hin zu einem Dienstproblem reichen. Die Clientbibliothek versucht automatisch, eine Verbindung mit dem Speicher im nächsten Aktualisierungsintervall herzustellen.
- NICHT GELADEN – Der Konfigurationsspeicher wird in der lokalen Konfigurationsdatei aufgeführt, der Konfigurationsspeicher wurde jedoch nicht aus der Datei beim Start geladen. Der Konfigurationsspeicher ist in der Konfigurationsdatei deaktiviert oder die Konfiguration oder die Konfigurationen konnten beim Start nicht geladen werden, während die
fail-fast-Konfiguration für den Speicher auffalsegesetzt war.
Sie können den Gesundheitsindikator aktivieren, indem Sie management.health.azure-app-configuration.enabled=true setzen.
Anpassung des Clients
Die App-Konfigurationsbibliothek verwendet das Azure SDK für Java zum Herstellen einer Verbindung mit Azure-App Configuration und Azure Key Vault. Es werden zwei Schnittstellen ConfigurationClientCustomizer und SecretClientCustomizerzum Ändern der Clients bereitgestellt. Jede Schnittstelle verfügt über eine customize Methode, die den jeweiligen Generator zusammen mit dem String Wert des URI verwendet, für den der Client konfiguriert wird, wie in den folgenden Schnittstellendefinitionen gezeigt:
public interface ConfigurationClientCustomizer {
public void customize(ConfigurationClientBuilder builder, String endpoint);
}
public interface SecretClientCustomizer {
public void customize(SecretClientBuilder builder, String endpoint);
}
Diese Schnittstellen ermöglichen die Anpassung des HTTP-Clients und seiner Konfigurationen. Im folgenden Beispiel wird der Standardwert HttpClient durch einen anderen ersetzt, der einen Proxy für den gesamten Datenverkehr verwendet, der an die App-Konfiguration und den Key Vault weitergeleitet wird.
Hinweis
Die ConfigurationClientBuilder und SecretClientBuilder sind bereits für die Verwendung eingerichtet, wenn sie in customize übergeben werden. Alle Änderungen an den Clients, einschließlich der Anmeldeinformationen und der Wiederholungsrichtlinie, setzen die Standardeinstellungen außer Kraft.
Sie können diese Konfiguration auch mithilfe der Spring Cloud Azure-Konfiguration ausführen.
public class CustomClient implements ConfigurationClientCustomizer, SecretClientCustomizer {
@Override
public void customize(ConfigurationClientBuilder builder, String endpoint) {
builder.httpClient(buildHttpClient());
}
@Override
public void customize(SecretClientBuilder builder, String endpoint) {
builder.httpClient(buildHttpClient());
}
private HttpClient buildHttpClient() {
String hostname = System.getProperty("https.proxyHosts");
String portString = System.getProperty("https.proxyPort");
int port = Integer.valueOf(portString);
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP,
new InetSocketAddress(hostname, port));
return new NettyAsyncHttpClientBuilder()
.proxy(proxyOptions)
.build();
}
}