Share via


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

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.12.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.18.0. 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_STRINGist 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>

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 nullihnen 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-filterWerden 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-filterWird 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.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.

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-fastfür diese Konfiguration . Wenn fail-fast sie durch Festlegen auf falseRuntimeException /> deaktiviert ist, führt dies dazu, dass der Anwendungsspeicher ohne Konfigurationen deaktiviert wird. Wenn ein Konfigurationsspeicher beim Start deaktiviert ist, wird er bei der Aktualisierung nicht auf Änderungen überprüft. Außerdem gibt es keinen Versuch, Werte daraus zu laden, wenn Konfigurationen aktualisiert werden.

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.

Verbindungszeichenfolge

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 .

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.

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 @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 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-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 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 ist false festgelegt. Diese Einstellung gibt immer den Wert des Featurekennzeichnungs zurück.
  • feature-u wird mit Featurefiltern verwendet. Diese Filter werden unter der enabled-for Eigenschaft definiert. In diesem Fall feature-u hat ein Featurefilter namens Random, der keine Konfiguration erfordert, sodass nur die Namenseigenschaft erforderlich ist.
  • feature-v Gibt einen Featurefilter mit dem Namen TimeWindowFilteran. Dieser Featurefilter kann Parameter übergeben werden, die als Konfiguration verwendet werden sollen. In diesem Beispiel übergibt ein TimeWindowFilter, die Start- und Endzeiten, in denen das Feature aktiv ist.
  • feature-w wird für die AlwaysOnFilter, die immer ausgewertet truewird . Das evaluate Feld wird verwendet, um die Auswertung der Featurefilter zu beenden, und führt dazu, dass der Featurefilter immer zurückgegeben wird false.

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-webenthält zusammen mit der Bereitstellung FeatureManager, die FeatureManagerSnapshotden 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

FeatureManagerist 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-fastfalse. 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 FeatureManagementSnapshotFeature-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 Endangeben, wird das Feature bis zu diesem Zeitpunkt aktiviert. Wenn Sie nur Startangeben, 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 truewird, 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 @Configurationdefiniert 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":

  1. Individuelle Benutzer Jeff und Alicia erhalten Zugriff auf die Betaversion.
  2. Ein anderer Benutzer, Mark, bittet, sich zu anmelden und ist enthalten.
  3. Zwanzig Prozent einer Gruppe, die als "Ring1"-Benutzer bezeichnet wird, sind in der Beta enthalten.
  4. Die Anzahl der in der Betaversion enthaltenen "Ring1"-Benutzer wird auf 100 Prozent erhöht.
  5. Fünf Prozent der Benutzerbasis sind in der Betaversion enthalten.
  6. 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 TargetingContextAccessorhinzugefü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 TargetingFilterdurchgeführt wird. Sie können während der TargetingFilter Erstellung einen optionalen Parameter TargetingEvaluationOptionsfestlegen.

    @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 @Beans 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, hmund 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-configverwendet werden , z. B. Konsolenanwendungen, können Sie eine Aktualisierung manuell durch Aufrufen AppConfigurationRefreshder refreshConfiguration Methode auslösen. AppConfigurationRefresh ist ein @Bean , das Sie in beliebige @ComponentElemente 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-busaber 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 Aktualisierungsintervall für die Standard erneute Aktualisierung 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, hmund 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 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 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();
    }

}