Unterstützung der App-Konfiguration
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, um den abstrahierten Abstraktionen zu entsprechen, die bereits von der Spring-Umgebung generiert wurden, 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 des App-Konfigurationsspeichers
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 wird pom.xml Datei 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>5.19.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>
Hinweis
Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies
Version auf 4.19.0
festlegen.
Weitere Informationen zu der Version, die für diese BOM verwendet wird, finden Sie unter Welche Version von Spring Cloud Azure sollte ich verwenden.
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 bootstrap.properties die folgende Zeile:
spring.cloud.azure.appconfiguration.stores[0].connection-string=${CONFIG_STORE_CONNECTION_STRING}
CONFIG_STORE_CONNECTION_STRING
ist eine Umgebungsvariable mit dem Verbindungszeichenfolge in Ihrem Azure-App Konfigurationsspeicher. Sie können über den folgenden Befehl auf Ihre Verbindungszeichenfolge zugreifen:
az appconfig credential list --name <name-of-your-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.
Wenn keine Konfigurationen festgelegt sind, werden die Konfigurationen, die mit einer Standardbezeichnung beginnen /application/
, mit einer Standardbezeichnung geladen, es sei denn, ein Federprofil ist festgelegt, in diesem Fall ist die Standardbezeichnung (No Label)
Ihr Federprofil. Da der Speicher leer ist, werden keine Konfigurationen geladen, aber die Azure-App Konfigurationseigenschaftsquelle wird weiterhin generiert.
Eine benannte /application/https://<name-of-your-store>.azconfig.io/
Eigenschaftsquelle wird erstellt, die die Eigenschaften dieses Speichers enthält. Die in der Anforderung verwendete Bezeichnung wird am Ende des Namens angefügt. Wenn keine Beschriftung festgelegt ist, ist das Zeichen \0
als leeres Leerzeichen vorhanden.
Laden der Konfiguration
Die Bibliothek unterstützt das Laden eines oder mehrerer App-Konfigurationsspeicher. In der Situation, in der ein Schlüssel in mehreren Speichern dupliziert wird, führt das Laden aller Speicher zu der Konfiguration mit der höchsten Priorität, die geladen wird. Der letzte gewinnt. Dieser Prozess wird im folgenden Beispiel veranschaulicht:
spring.cloud.azure.appconfiguration.stores[0].connection-string=[first-store-connection-string]
spring.cloud.azure.appconfiguration.stores[1].connection-string=[second-store-connection-string]
Wenn im Beispiel sowohl der erste als auch der zweite Speicher dieselbe Konfiguration aufweisen, hat die Konfiguration im zweiten Speicher die höchste Priorität, und die letzte gewinnt.
Hinweis
Sie können Azure-App Konfigurationseinstellungen wie jede andere Federkonfiguration verwenden. Weitere Informationen finden Sie in der Dokumentation zum Spring Boot oder schnellstart: Erstellen einer Java Spring-App mit Azure-App Konfiguration.
Auswählen von Konfigurationen
Konfigurationen werden durch den Schlüssel und die Bezeichnung geladen. Standardmäßig werden die Konfigurationen geladen, die mit dem Schlüssel /application/
beginnen. Die Standardbezeichnung lautet ${spring.profiles.active}
. Falls ${spring.profiles.active}
nicht festgelegt, werden Konfigurationen mit der null
Bezeichnung geladen. Die null
Beschriftung wird wie (No Label)
in der Azure-Portal angezeigt.
Sie können die konfigurationen konfigurieren, die geladen werden, indem Sie verschiedene Schlüssel- und Bezeichnungsfilter auswählen, wie im folgenden Beispiel gezeigt:
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* |
Übereinstimmung mit Schlüsselnamen, die mit abc beginnen. |
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:
Label | Beschreibung |
---|---|
* |
Entspricht jeder Bezeichnung, einschließlich \0 . |
\0 |
Gleicht null Beschriftungen ab, die wie (No Label) in der Azure-Portal angezeigt werden. |
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 mit null
ihnen beginnen müssen, muss der Bezeichnungsfilter von einfachen Anführungszeichen umgeben sein, wie im folgenden Beispiel gezeigt:
spring:
cloud:
azure:
appconfiguration:
stores:
- selects:
- label-filter: ',1.0.0'
Hinweis
Sie können nicht mit ,
Filtern kombinieren*
. In diesem Fall müssen Sie einen zusätzlichen Auswahlwert verwenden.
Spring-Profile
Ist standardmäßig spring.profiles.active
als Standard label-filter
für alle ausgewählten Konfigurationen festgelegt. Sie können diese Funktionalität mithilfe von label-filter
. Sie können die Federprofile in der label-filter
Folgenden verwenden ${spring.profiles.active}
, 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-filter
Werden alle Konfigurationen mit der null
Bezeichnung geladen, gefolgt von allen Konfigurationen, die den Federprofilen entsprechen. Federprofile haben Vorrang vor den null
Konfigurationen, da sie sich am Ende befinden.
Im zweiten label-filter
Wird die Zeichenfolge _local
an das Ende der Federprofile angefügt, jedoch nur an das letzte Federprofil.
Deaktivierte Speicher
Mit der Konfiguration spring.cloud.azure.appconfiguration.enabled
kö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.
Zusätzlich zum Deaktivieren von Speichern können Sie Speicher so konfigurieren, dass sie deaktiviert werden, wenn sie nicht geladen werden. Verwenden Sie spring.cloud.azure.appconfiguration.stores[0].fail-fast
für diese Konfiguration . Wenn fail-fast
sie durch Festlegen auf false
Wenn ein Fehler RuntimeException
auftritt, der während einer Aktualisierungsprüfung oder beim Versuch, Konfigurationen neu zu laden, auftritt, endet der Aktualisierungsversuch und wird erneut versucht, nachdem die refresh-interval
Aktualisierung bestanden wurde.
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 für Verbindungszeichenfolge s und verwaltete Identität 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.
Connection string
Die Authentifizierung über Verbindungszeichenfolge ist das einfachste Formular zum Einrichten. 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 spring.cloud.azure.appconfiguration.stores[0].connection-string
Eigenschaft auf den Verbindungszeichenfolge festlegen. Es 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 des 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. Die DefaultAzureCredential
folgenden Methoden werden zum Authentifizieren verwendet:
- Umgebungsanmeldeinformationen
- Anmeldeinformationen für verwaltete Identität
- Azure Developer CLI-Anmeldeinformationen
- IntelliJ-Anmeldeinformationen
- Azure CLI-Anmeldeinformationen
- Azure PowerShell-Anmeldeinformationen
Sie müssen eine Identität wie z. B. eine system zugewiesene Identität zu Lesekonfigurationen zuweisen. 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 Speicher ändern, die eine andere Methode verwenden ConfigurationClientCustomizer
.
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.
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.
- Es werden Netzwerkkonnektivitätsprobleme auftreten.
- Anforderungen werden gedrosselt (HTTP-Statuscode 429).
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]
Verwenden des Konfigurationsspeicherreplikats
Nachdem Sie ein Replikat erstellt haben, können Sie es in Ihrer Anwendung verwenden. Wie der Ursprungsspeicher können Sie mithilfe der Microsoft Entra-ID oder einer Verbindungszeichenfolge eine Verbindung mit Ihrem Replikat herstellen.
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.
Um die Microsoft Entra-ID zum Herstellen einer Verbindung mit Ihrem Replikat zu verwenden, müssen Sie die endpoints
Instanzen Ihres Konfigurationsspeichers auflisten, wie im folgenden Beispiel gezeigt:
spring.cloud.azure.appconfiguration.stores[0].endpoints[0]=[your primary store endpoint]
spring.cloud.azure.appconfiguration.stores[0].endpoints[1]=[your replica store endpoint]
Sie können beliebig viele Endpunkte auflisten, während Replikate vorhanden sind. Die Bibliothek versucht, eine Verbindung mit den Endpunkten herzustellen, in der Reihenfolge, in der sie aufgeführt sind. Wenn die Bibliothek keine Verbindung mit einem Replikat herstellen kann, wird die nächste in der Liste versucht. Nach ablauf eines bestimmten Zeitraums versucht die Bibliothek, eine erneute Verbindung mit den bevorzugten Endpunkten herzustellen.
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 Platzhaltern für ${}
die Umgebungsumgebung. Wenn Sie auf einen Azure-App Konfigurationsschlüssel mit einem Platzhalter verweisen, entfernen Sie Präfixe aus dem Verweis. Beispielsweise /application/config.message
wird als ${config.message}
.
Hinweis
Das präfix, das entfernt wird, entspricht dem Wert spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter
.
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 @ConfigurationProperties
Objekts 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 werden sicher im Key Vault gespeichert, können aber auf die gleiche Weise wie jede andere Konfiguration zugreifen, nachdem sie geladen wurde.
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 ermöglicht es nur, geheime Schlüssel einzeln abzurufen, sodass jeder in der App-Konfiguration gespeicherte Schlüsseltresorverweis zu einem Pull für Key Vault führt.
Erstellen von Key Vault-Verweisen
Sie können im Azure-Portal einen Key Vault-Verweis erstellen, indem Sie zum Konfigurations-Explorer>"Key Vault erstellen>" wechseln. Sie können dann einen geheimen Schlüssel auswählen, auf den Sie von einem der Schlüsseltresor verweisen möchten, auf den Sie Zugriff haben. 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 die gleichen Anmeldeinformationen verwenden, die zum Herstellen einer Verbindung mit der App-Konfiguration verwendet werden, um eine Verbindung mit Azure Key Vault herzustellen.
Auflösen geheimer Schlüssel des Nichtschlüsseltresors
Die App-Konfigurationsbibliothek bietet eine Methode, um geheime Schlüssel lokal aufzulösen, denen kein Key Vault zugeordnet ist. Diese Entschließung erfolgt über die KeyVaultSecretProvider
. Der KeyVaultSecretProvider
Aufruf wird aufgerufen, wenn kein TokenCredential
Schlüsseltresorverweis bereitgestellt wird. Der URI des Key Vault-Verweises wird bereitgestellt, und der zurückgegebene Wert wird zum Wert des geheimen Schlüssels.
Warnung
Die Verwendung einer KeyVaultSecretProvider
Außerkraftsetzung der automatischen Verwendung der vom System zugewiesenen verwalteten Identität. Um beides zu verwenden, müssen Sie die URIs verwenden KeyVaultCredentialProvider
und zurückgeben null
, die aufgelöst werden müssen.
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 Featurefilter
- Featuregates zum dynamischen Aktivieren 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-management
in 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 der Featureverwaltung ist die Verwendung der spring-cloud-azure-feature-management
Funktionen 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 benötigt wird, um weitere Features wie Featuregates hinzuzufügen.
Sie können Featurekennzeichnungen mithilfe von Schlüssel-/Bezeichnungsfiltern aktivieren. Standardmäßig wird eine null
Bezeichnung zugewiesen, die als (No Label)
" bezeichnet" angezeigt wird. Sie können die featurekennzeichnungen konfigurieren, die geladen werden, indem Sie einen Bezeichnungsfilter festlegen, wie im folgenden Beispiel gezeigt:
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 zwei Teilen: einem Namen und einer Liste von Featurefiltern, die zum Aktivieren des Features verwendet werden. Featurekennzeichnungen können entweder über einen booleschen Status von "Ein/Aus" verfügen, oder sie können eine Liste mit Featurefiltern enthalten. Featurekennzeichnungen werten Featurefilter aus, bis eine zurückgegeben wird true
. Wenn kein Featurefilter zurückgegeben wird true
, wird das Feature-Flag zurückgegeben false
.
Featurefilter
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 Azure-App Konfiguration zusammen mit application.yml oder bootstrap.yml 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-t: false
feature-u:
enabled-for:
- name: Random
feature-v:
enabled-for:
- name: TimeWindowFilter
parameters:
Start: "Wed, 01 May 2019 13:59:59 GMT"
End: "Mon, 01 July 2019 00:00:00 GMT"
feature-w:
evaluate: false
enabled-for:
- name: AlwaysOnFilter
Dieses Beispiel weist die folgenden Featurekennzeichnungen auf:
- Für
feature-t
istfalse
festgelegt. Diese Einstellung gibt immer den Wert des Featurekennzeichnungs zurück. feature-u
wird mit Featurefiltern verwendet. Diese Filter werden unter derenabled-for
Eigenschaft definiert. In diesem Fallfeature-u
hat ein Featurefilter namensRandom
, der keine Konfiguration erfordert, sodass nur die Namenseigenschaft erforderlich ist.feature-v
gibt einen Featurefilter mit dem NamenTimeWindowFilter
an. Dieser Featurefilter kann Parameter übergeben werden, die als Konfiguration verwendet werden sollen. In diesem Beispiel übergibt einTimeWindowFilter
, die Start- und Endzeiten, in denen das Feature aktiv ist.feature-w
wird für dieAlwaysOnFilter
, die immer ausgewertettrue
wird . Dasevaluate
Feld wird verwendet, um die Auswertung der Featurefilter zu beenden, und führt dazu, dass der Featurefilter immer zurückgegeben wirdfalse
.
Auswerten von Featurekennzeichnungen
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 FeatureManager
, die FeatureManagerSnapshot
den Status der zuvor ausgewerteten Feature-Flags zwischenspeichert, @RequestScope
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
Objekt, das in @Component
Typobjekte eingefügt oder eingefügt werden @Autowired
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
FeatureManger
verfügt außerdem über eine asynchrone Version von isEnabled
aufgerufen isEnabledAsync
.
Wenn Sie keine Featureverwaltung konfiguriert haben oder 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, um es zurückzugeben false
, indem Sie diese Einstellung konfigurieren fail-fast
false
. In der folgenden Tabelle wird beschrieben fail-fast
:
Name | BESCHREIBUNG | Erforderlich | Standard |
---|---|---|---|
spring.cloud.azure.feature.management.fail-fast |
Wenn eine Ausnahme auftritt, wird ein RuntimeException Fehler ausgelöst. Wenn diese Eigenschaft auf false festgelegt ist, wird stattdessen isEnabled zurückgegeben false . |
No | true |
Der einzige Unterschied zwischen FeatureManagerSnapshot
und FeatureManager
ist das Zwischenspeichern von Ergebnissen in der @RequestScope
.
Featuregate
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 ihr festgelegte Feature deaktiviert ist, DisabledFeaturesHandler
wird er 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;
}
}
Routing
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 nicht automatisch hinzugefügt, aber Sie können sie in einer @Configuration
.
AlwaysOnFilter
Dieser Filter gibt immer zurück true
. Ein Verwendungsbeispiel finden Sie im Abschnitt "Featurekennzeichnungsdeklaration ".
PercentageFilter
Jedes Mal, wenn ein Benutzer eine Anforderung vorgibt, kann die Auswertung PercentageFilter
ein anderes Ergebnis zurückgeben. Sie können diese Inkonsistenz umgehen, indem Sie das FeatureManagementSnapshot
Feature-Flag pro Benutzer zwischenspeichern. Diese Funktion stellt sicher, dass ein Benutzer eine konsistente Erfahrung hat, auch wenn er die Anforderung erneut senden muss.
feature-management:
feature-v:
enabled-for:
- name: PercentageFilter
parameters:
Value: 50
TimeWindowFilter
Dieser Filter bietet die Möglichkeit, ein Feature basierend auf einem Zeitfenster zu aktivieren. Wenn Sie nur End
angeben, wird das Feature bis zu diesem Zeitpunkt aktiviert. Wenn Sie nur Start
angeben, wird das Feature zu allen Zeitpunkten berücksichtigt. Wenn Sie beide angeben, wird das Feature zwischen den beiden Zeiten als gültig betrachtet.
feature-management:
feature-v:
enabled-for:
- name: TimeWindowFilter
parameters:
Start: "Wed, 01 May 2019 13:59:59 GMT",
End: "Mon, 01 July 2019 00:00:00 GMT"
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 ist in dem prozentsatz der Gruppenrollouts enthalten.
- Der Benutzer fällt in den Standardrollout-Prozentsatz.
feature-management:
target:
enabled-for:
- name: targetingFilter
parameters:
users:
- Jeff
- Alicia
groups:
- name: Ring0
rollout-percentage: 100
- name: Ring1
rolloutPercentage: 100
default-rollout-percentage: 50
Benutzerdefinierte Featurefilter
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 evaluate
dieser Wert zurückgegeben true
wird, bedeutet dies, dass das Feature aktiviert werden soll. Wenn sie zurückgegeben wird false
, wird die Auswertung von Featurefiltern fortgesetzt, bis eine zurückgegeben wird true
. Wenn alle Filter zurückgegeben werden false
, ist das Feature deaktiviert.
Featurefilter werden als SpringBohnen definiert, sodass sie entweder als @Component
oder in einer @Configuration
definiert sind.
@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 Featurefilter entwerfen, um Parameter zu erwarten. Diese Parameter werden in der Featurekonfiguration und im Code angegeben und können über den FeatureFilterEvaluationContext
Parameter von evaluate
. FeatureFilterEvaluationContext
hat eine Eigenschaft parameters
, die ein HashMap<String, Object>
.
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 mit der Verwendung in TargetingFilter
einer Anwendung zu beginnen, müssen Sie sie wie @Bean
jeder andere Featurefilter hinzufügen. TargetingFilter
basiert auf einem anderen @Bean
, das der Anwendung TargetingContextAccessor
hinzugefügt werden soll. Dies TargetingContextAccessor
ermöglicht das Definieren des Aktuellen TargetingContext
, das zum Definieren der aktuellen Benutzer-ID und -Gruppen verwendet werden soll, wie im folgenden Beispiel gezeigt:
public class MyTargetingContextAccessor implements TargetingContextAccessor {
@Override
public void getContextAsync(TargetingContext context) {
context.setUserId("Jeff");
ArrayList<String> groups = new ArrayList<String>();
groups.add("Ring0");
context.setGroups(groups);
}
}
Optionen für die Zielauswertung
Optionen stehen zur Verfügung, um anzupassen, wie die Zielauswertung in einem bestimmten Bereich TargetingFilter
durchgeführt wird. Sie können während der TargetingFilter
Erstellung einen optionalen Parameter TargetingEvaluationOptions
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 Überwachungstriggern aktivieren. Ein Überwachungstrigger ist ein Schlüssel mit einer optionalen Bezeichnung, die auf Wertänderungen überprüft wird, 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 Überwachungstasten auf einen neuen Wert. Diese Änderung löst die Erstellung eines Protokolls aus. Wenn Sie beispielsweise den Wert von /application/config.message
Triggern ändern, wird die folgende Protokollmeldung angezeigt:
INFO 17496 --- [TaskScheduler-1] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [config.message]
Nachdem die Anwendung das Protokoll generiert hat, werden alle @Bean
s im Aktualisierungsbereich aktualisiert.
Hinweis
In diesem Bereich sind standardmäßig @ConfigurationProperties
kommentierte Bohnen enthalten.
Pull-basierte Aktualisierung
Die Federbibliotheken für die App-Konfiguration unterstützen die Möglichkeit, regelmäßig ein Aktualisierungsintervall auf Änderungen zu überprüfen, die an den Überwachungstriggern vorgenommen wurden. Standardmäßig ist das Aktualisierungsintervall auf 30 Sekunden festgelegt. Nachdem das Aktualisierungsintervall bestanden wurde, werden alle Trigger 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
, h
m
und 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
. Das häufigste Verfahren, wie dieses Ereignis gesendet wird, ist von Anforderungen an Endpunkte in einer @RestController
.
Manuell
In Anwendungen, die nur spring-cloud-azure-appconfiguration-config
verwendet werden , z. B. Konsolenanwendungen, können Sie eine Aktualisierung manuell durch Aufrufen AppConfigurationRefresh
der refreshConfiguration
Methode auslösen. AppConfigurationRefresh
ist ein @Bean
, das Sie in beliebige @Component
Elemente 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 Konfigurationsspeicher.
Pushbasierte Aktualisierung
Sie können die spring-cloud-azure-appconfiguration-config-web
Bibliothek so einrichten, dass Pushbenachrichtigungen von 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 das refresh
Und-Element weiterhin verwenden, refresh-bus
aber Sie können sie nicht direkt mit Azure Event Grid mit einem Web Hook verbinden, da sie eine Antwort im Setup erfordern.
Die appconfiguration-refresh
Eigenschaft läuft das Aktualisierungsintervall ab, sodass das verbleibende Aktualisierungsintervall nicht vor der nächsten Aktualisierungsprüfung gewartet wird. Die appconfiguration-refresh-bus
Eigenschaft sendet eine Benachrichtigung an einen verbundenen Messagingdienst, z. B. Azure Service Bus, um alle Instanzen einer Anwendung zu benachrichtigen, um die Aktualisierung 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 wurde ein erforderlicher Abfrageparameter zur Sicherheit hinzugefügt. Standardmäßig ist kein Tokenname oder -wert festgelegt, aber das Festlegen eines Werts ist erforderlich, um die Endpunkte zu verwenden, 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 Web-Hook einzurichten, öffnen Sie ihren Azure-App Konfigurationsspeicher, und öffnen Sie Ereignisse aus dem Navigationsmenü. 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
.
Bestätigen Sie, dass Selection eine Setupbenachrichtigung an den angegebenen URI sendet und eine Antwort erwartet. 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 . |
No | NULL |
spring.cloud.azure.appconfiguration.refresh-interval
Bei der Aktualisierung werden keine konfigurierten Überwachungstasten überprüft. Diese Eigenschaft wird verwendet, um sicherzustellen, dass Schlüsseltresorschlüssel auf dem neuesten Stand gehalten werden, da 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 gedreht werden müssen, müssen Clientanwendungen genauso häufig aktualisiert werden, was mithilfe des Clientaktualisierungsintervalls erfolgen kann.
Featurekennzeichnungsaktualisierung
Wenn Featurekennzeichnungen und -überwachungen aktiviert sind, wird standardmäßig das Aktualisierungsintervall für Featurekennzeichnungen auf 30 Sekunden festgelegt. Nachdem das Aktualisierungsintervall bestanden wurde, werden alle Featurekennzeichnungen 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
, h
m
und 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
Integritätsindikator
Die Clientbibliothek enthält einen Integritätsindikator, der überprüft, ob die Verbindung zum Azure-App Konfigurationsspeicher oder -speichern fehlerfrei 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 ohne 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 Konfigurationen konnten beim Start nicht geladen werden, während die
fail-fast
Konfiguration für den Speicher auf ".false
Sie können den Integritätsindikator aktivieren, indem Sie die Einstellung festlegen management.health.azure-app-configuration.enabled=true
.
Clientanpassung
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 SecretClientCustomizer
zum Ä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 setup(ConfigurationClientBuilder builder, String endpoint);
}
public interface SecretClientCustomizer {
public void setup(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 übergeben wird customize
. Alle Änderungen an den Clients, einschließlich der Anmeldeinformationen und der Wiederholungsrichtlinie, überschreiben diese bereits vorhanden.
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();
}
}