Ondersteuning voor app-configuratie
In dit artikel wordt de Spring Cloud Azure-app Configuration-bibliotheek beschreven. Met deze bibliotheek worden configuraties en functievlagmen van de Azure-app Configuration-service geladen. De bibliotheek genereert PropertySource
abstracties die overeenkomen met de abstracties die al zijn gegenereerd door de Spring-omgeving, zoals omgevingsvariabelen, opdrachtregelconfiguraties, lokale configuratiebestanden, enzovoort.
Spring is een opensource-toepassingsframework dat is ontwikkeld door VMware en biedt een vereenvoudigde, modulaire benadering voor het maken van Java-toepassingen. Spring Cloud Azure is een opensource-project dat naadloze Spring-integratie met Azure-services biedt.
Vereisten
- Een Azure-abonnement (u kunt een gratis abonnement maken).
- Java Development Kit (JDK) versie 8 of hoger.
- Apache Maven
- Azure-CLI
Uw App Configuration-archief instellen
Gebruik de volgende opdracht om uw Azure-app Configuratiearchief te maken:
az appconfig create \
--resource-group <your-resource-group> \
--name <name-of-your-new-store> \
--sku Standard
Met deze opdracht maakt u een nieuw, leeg configuratiearchief. U kunt uw configuraties uploaden met behulp van de volgende importopdracht:
az appconfig kv import \
--name <name-of-your-new-store> \
--source file \
--path <location-of-your-properties-file> \
--format properties \
--prefix /application/
Bevestig uw configuraties voordat u ze laadt. U kunt YAML-bestanden uploaden door de indeling te wijzigen in YAML. Het voorvoegselveld is belangrijk omdat het het standaardvoorvoegsel is dat door de clientbibliotheek wordt geladen.
Bibliotheekgebruik
Als u de functie in een toepassing wilt gebruiken, kunt u deze bouwen als een Spring Boot-toepassing. De handigste manier om de afhankelijkheid toe te voegen is met de Spring Boot-starter com.azure.spring:spring-cloud-azure-starter-appconfiguration-config
. In het volgende voorbeeld pom.xml bestand Azure-app Configuratie wordt gebruikt:
<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>
Notitie
Als u Spring Boot 2.x gebruikt, moet u de spring-cloud-azure-dependencies
versie instellen op 4.19.0
.
Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.
In het volgende voorbeeld ziet u een eenvoudige Spring Boot-toepassing met behulp van App Configuration:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
In dit voorbeeld bevat het bestand bootstrap.properties de volgende regel:
spring.cloud.azure.appconfiguration.stores[0].connection-string=${CONFIG_STORE_CONNECTION_STRING}
CONFIG_STORE_CONNECTION_STRING
is een omgevingsvariabele met de verbindingsreeks naar uw Azure-app Configuratiearchief. U hebt toegang tot uw verbindingsreeks met behulp van de volgende opdracht:
az appconfig credential list --name <name-of-your-store>
Notitie
Microsoft raadt aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, zoals voor databases, caches, berichten of AI-services, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. Gebruik deze stroom alleen wanneer veiligere opties, zoals beheerde identiteiten voor wachtwoordloze of sleutelloze verbindingen, niet haalbaar zijn. Voor bewerkingen van lokale machines geeft u de voorkeur aan gebruikersidentiteiten voor verbindingen zonder wachtwoord of sleutelloze verbindingen.
Als er geen configuraties zijn ingesteld, worden de configuraties die beginnen met /application/
een standaardlabel (No Label)
geladen, tenzij een Spring-profiel is ingesteld, in welk geval het standaardlabel uw Spring-profiel is. Omdat het archief leeg is, worden er geen configuraties geladen, maar wordt de Azure-app bron van de configuratie-eigenschap nog steeds gegenereerd.
Er wordt een eigenschapsbron met /application/https://<name-of-your-store>.azconfig.io/
de eigenschappen van dat archief gemaakt. Het label dat in de aanvraag wordt gebruikt, wordt toegevoegd aan het einde van de naam. Als er geen label is ingesteld, is het teken \0
aanwezig als een lege spatie.
Configuratie laden
De bibliotheek ondersteunt het laden van een of meerdere App Configuration-archieven. In het geval dat een sleutel wordt gedupliceerd in meerdere winkels, resulteert het laden van alle winkels in de configuratie met de hoogste prioriteit die wordt geladen. De laatste wint. Dit proces wordt geïllustreerd in het volgende voorbeeld:
spring.cloud.azure.appconfiguration.stores[0].connection-string=[first-store-connection-string]
spring.cloud.azure.appconfiguration.stores[1].connection-string=[second-store-connection-string]
Als zowel de eerste als de tweede opslag dezelfde configuratie hebben, heeft de configuratie in het tweede archief de hoogste prioriteit en de laatste wint.
Notitie
U kunt Azure-app configuratie-instellingen gebruiken, zoals elke andere Spring-configuratie. Zie De belangrijkste functies in de Spring Boot-documentatie of quickstart: Een Java Spring-app maken met Azure-app-configuratie voor meer informatie.
Configuraties selecteren
Configuraties worden geladen door hun sleutel en label. Standaard worden de configuraties die beginnen met de sleutel /application/
geladen. Het standaardlabel is ${spring.profiles.active}
. Als ${spring.profiles.active}
dit niet is ingesteld, worden configuraties met het null
label geladen. Het null
label wordt weergegeven zoals (No Label)
in Azure Portal.
U kunt de configuraties configureren die worden geladen door verschillende sleutel- en labelfilters te selecteren, zoals wordt weergegeven in het volgende voorbeeld:
spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter=[my-key]
spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=[my-label]
De key-filter
eigenschap ondersteunt de volgende filters:
Sleutelfilter | Effect |
---|---|
* |
Komt overeen met een willekeurige sleutel. |
abc |
Komt overeen met een sleutel met de naam abc . |
abc* |
Komt overeen met sleutelnamen die beginnen met abc . |
abc,xyz |
Komt overeen met sleutelnamen abc of xyz . Beperkt tot vijf door komma's gescheiden waarden. |
De label-filter
eigenschap ondersteunt de volgende filters:
Etiket | Beschrijving |
---|---|
* |
Komt overeen met elk label, inclusief \0 . |
\0 |
Komt overeen met null labels, die worden weergegeven als (No Label) in Azure Portal. |
1.0.0 |
Komt exact overeen met het label 1.0.0 . |
1.0.* |
Komt overeen met labels die beginnen met 1.0.* . |
,1.0.0 |
Komt overeen met labels null en 1.0.0 . Beperkt tot vijf door komma's gescheiden waarden. |
Als u YAML gebruikt met labelfilters en u moet beginnen, null
moet het labelfilter tussen enkele aanhalingstekens staan, zoals wordt weergegeven in het volgende voorbeeld:
spring:
cloud:
azure:
appconfiguration:
stores:
- selects:
- label-filter: ',1.0.0'
Notitie
U kunt niet combineren *
met ,
filters. In dat geval moet u een extra select-waarde gebruiken.
Spring-profielen
spring.profiles.active
Standaard is deze optie ingesteld als de standaardinstelling label-filter
voor alle geselecteerde configuraties. U kunt deze functionaliteit overschrijven met behulp van label-filter
. U kunt de Spring-profielen in het label-filter
gebruik gebruiken, ${spring.profiles.active}
zoals wordt weergegeven in het volgende voorbeeld:
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
In de eerste label-filter
worden alle configuraties met het null
label geladen, gevolgd door alle configuraties die overeenkomen met de Spring-profielen. Spring-profielen hebben prioriteit boven de null
configuraties, omdat ze aan het einde staan.
In de tweede label-filter
wordt de tekenreeks _local
toegevoegd aan het einde van de Spring-profielen, maar alleen aan het laatste Spring-profiel.
Uitgeschakelde winkels
Met behulp van de configuratie spring.cloud.azure.appconfiguration.enabled
kunt u het laden voor alle configuratiearchieven uitschakelen. Met de spring.cloud.azure.appconfiguration.stores[0].enabled
configuratie kunt u een afzonderlijk archief uitschakelen.
Naast het uitschakelen van winkels kunt u ervoor zorgen dat winkels worden uitgeschakeld als ze niet worden geladen. Gebruik spring.cloud.azure.appconfiguration.stores[0].fail-fast
voor deze configuratie . Wanneer fail-fast
dit is uitgeschakeld door deze in te false
stellen, RuntimeException
wordt het toepassingsarchief uitgeschakeld zonder dat er configuraties worden geladen. Als een configuratiearchief is uitgeschakeld bij het opstarten, wordt het niet gecontroleerd op wijzigingen bij het vernieuwen. Er is ook geen poging om er waarden van te laden als configuraties worden bijgewerkt.
Als er een fout optreedt tijdens RuntimeException
een vernieuwingscontrole of tijdens een poging om configuraties opnieuw te laden, wordt de vernieuwingspoging beëindigd en opnieuw geprobeerd nadat de refresh-interval
configuratie is geslaagd.
Verificatie
De bibliotheek ondersteunt alle vormen van identiteit die worden ondersteund door de Azure Identity Library. U kunt verificatie uitvoeren via configuratie voor verbindingsreeks s en beheerde identiteit.
Notitie
Microsoft raadt aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, zoals voor databases, caches, berichten of AI-services, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. Gebruik deze stroom alleen wanneer veiligere opties, zoals beheerde identiteiten voor wachtwoordloze of sleutelloze verbindingen, niet haalbaar zijn. Voor bewerkingen van lokale machines geeft u de voorkeur aan gebruikersidentiteiten voor verbindingen zonder wachtwoord of sleutelloze verbindingen.
Connection string
Verificatie via verbindingsreeks is het eenvoudigste formulier om in te stellen. U kunt de verbindingsreeks s van een winkel openen met behulp van de volgende opdracht:
az appconfig credential list --name <name-of-your-store>
Vervolgens kunt u de spring.cloud.azure.appconfiguration.stores[0].connection-string
eigenschap instellen op de verbindingsreeks. U wordt ten zeerste aangeraden de verbindingsreeks in het lokale configuratiebestand in te stellen op een tijdelijke aanduiding die is toegewezen aan een omgevingsvariabele. Met deze methode kunt u voorkomen dat u de verbindingsreeks toevoegt aan broncodebeheer.
Spring Cloud Azure-configuratie
U kunt de Azure-configuratie van Spring Cloud gebruiken om de bibliotheek te configureren. U kunt de volgende eigenschappen gebruiken om de bibliotheek te configureren:
spring.cloud.azure.appconfiguration.stores[0].endpoint= <URI-of-your-configuration-store>
Wanneer alleen het eindpunt is ingesteld, gebruikt de clientbibliotheek de DefaultAzureCredential om te verifiëren. Hierbij DefaultAzureCredential
worden de volgende methoden gebruikt om te verifiëren:
- Omgevingsreferenties
- Referenties voor beheerde identiteit
- Azure Developer CLI-referentie
- IntelliJ-referentie
- Azure CLI-referentie
- Azure PowerShell-referentie
U moet een identiteit, zoals een door het systeem toegewezen identiteit, toewijzen aan leesconfiguraties. U kunt deze toewijzing maken met behulp van de volgende opdracht:
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>
Notitie
U kunt slechts één verificatiemethode per eindpunt definiëren: verbindingsreeks, door de gebruiker toegewezen identiteit of tokenreferenties. Als u wilt combineren en vergelijken, kunt u winkels wijzigen die een andere methode gebruiken ConfigurationClientCustomizer
.
Notitie
Microsoft raadt aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, zoals voor databases, caches, berichten of AI-services, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. Gebruik deze stroom alleen wanneer veiligere opties, zoals beheerde identiteiten voor wachtwoordloze of sleutelloze verbindingen, niet haalbaar zijn. Voor bewerkingen van lokale machines geeft u de voorkeur aan gebruikersidentiteiten voor verbindingen zonder wachtwoord of sleutelloze verbindingen.
Geo-replicatie
De bibliotheek ondersteunt de functie voor geo-replicatie van Azure-app-configuratie. Met deze functie kunt u uw gegevens repliceren naar andere locaties. Deze functie is handig voor hoge beschikbaarheid en herstel na noodgevallen.
Elke replica die u maakt, heeft een toegewezen eindpunt. Als uw toepassing zich in meerdere geolocaties bevindt, kunt u elke implementatie van uw toepassing bijwerken op een locatie om verbinding te maken met de replica dichter bij die locatie, waardoor de netwerklatentie tussen uw toepassing en App Configuration wordt geminimaliseerd. Omdat elke replica een afzonderlijk aanvraagquotum heeft, helpt deze installatie ook de schaalbaarheid van uw toepassing terwijl deze groeit naar een gedistribueerde service met meerdere regio's.
De failover kan optreden als de bibliotheek aan een van de volgende voorwaarden voldoet:
- Ontvangt antwoorden met servicestatuscode (HTTP 500 of hoger) van een eindpunt.
- Ondervindt netwerkverbindingsproblemen.
- Aanvragen worden beperkt (HTTP-statuscode 429).
Een configuratiearchief maken met geo-replicatie
Als u een replica van uw configuratiearchief wilt maken, kunt u de Azure CLI of Azure Portal gebruiken. In het volgende voorbeeld wordt de Azure CLI gebruikt om een replica te maken in de regio VS - oost 2:
az appconfig replica create --location --name --store-name [--resource-group]
De replica van het configuratiearchief gebruiken
Nadat u een replica hebt gemaakt, kunt u deze gebruiken in uw toepassing. Net als de origin Store kunt u verbinding maken met uw replica met behulp van Microsoft Entra ID of een verbindingsreeks.
Notitie
Microsoft raadt aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, zoals voor databases, caches, berichten of AI-services, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. Gebruik deze stroom alleen wanneer veiligere opties, zoals beheerde identiteiten voor wachtwoordloze of sleutelloze verbindingen, niet haalbaar zijn. Voor bewerkingen van lokale machines geeft u de voorkeur aan gebruikersidentiteiten voor verbindingen zonder wachtwoord of sleutelloze verbindingen.
Als u Microsoft Entra ID wilt gebruiken om verbinding te maken met uw replica, moet u de endpoints
exemplaren van uw configuratiearchief weergeven, zoals wordt weergegeven in het volgende voorbeeld:
spring.cloud.azure.appconfiguration.stores[0].endpoints[0]=[your primary store endpoint]
spring.cloud.azure.appconfiguration.stores[0].endpoints[1]=[your replica store endpoint]
U kunt zoveel eindpunten weergeven als u replica's hebt. De bibliotheek probeert verbinding te maken met de eindpunten in de volgorde waarin ze worden weergegeven. Als de bibliotheek geen verbinding kan maken met een replica, wordt de volgende in de lijst geprobeerd. Nadat een bepaalde periode is verstreken, probeert de bibliotheek opnieuw verbinding te maken met de voorkeurseindpunten.
Sleutelwaarden
Azure-app Configuration ondersteunt meerdere typen sleutelwaarden, waarvan sommige speciale functies hebben ingebouwd. Azure-app Configuration biedt ingebouwde ondersteuning voor het JSON-inhoudstype, tijdelijke aanduidingen voor Spring en Key Vault-verwijzingen.
Tijdelijke aanduidingen
De bibliotheek ondersteunt configuraties met ${}
tijdelijke aanduidingen voor de omgeving in -style. Wanneer u verwijst naar een Azure-app-configuratiesleutel met een tijdelijke aanduiding, verwijdert u voorvoegsels uit de verwijzing. Er wordt bijvoorbeeld /application/config.message
naar verwezen als ${config.message}
.
Notitie
Het voorvoegsel dat wordt verwijderd, komt overeen met de waarde spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter
.
JSON
Configuraties met een inhoudstype application/json
worden verwerkt als JSON-objecten. Met deze functie kunt u één configuratie toewijzen aan een complex object in een @ConfigurationProperties
. Denk bijvoorbeeld aan de JSON-sleutel /application/config.colors
met de volgende waarde:
{
"Red": {
"value": [255, 0, 0]
},
"Blue": {
"value": [0, 255, 0]
},
"Green": {
"value": [0, 0, 255]
}
}
Deze sleutel wordt toegewezen aan de volgende code:
@ConfigurationProperties(prefix = "config")
public class MyConfigurations {
private Map<String, Color> colors;
}
Key Vault-verwijzingen
Azure-app Configuratie en de bijbehorende bibliotheken ondersteunen het verwijzen naar geheimen die zijn opgeslagen in Key Vault. In App Configuration kunt u sleutels maken met waarden die zijn toegewezen aan geheimen die zijn opgeslagen in een Sleutelkluis. Geheimen worden veilig opgeslagen in Key Vault, maar kunnen op dezelfde manier worden geopend als elke andere configuratie nadat deze is geladen.
Uw toepassing gebruikt de clientprovider om Key Vault-verwijzingen op te halen, net zoals voor andere sleutels die zijn opgeslagen in App Configuration. Omdat de client de sleutels herkent als Key Vault-verwijzingen, hebben ze een uniek inhoudstype en maakt de client verbinding met Key Vault om hun waarden voor u op te halen.
Notitie
Key Vault staat alleen toe dat geheimen één voor één worden opgehaald, dus elke Key Vault-verwijzing die is opgeslagen in App Configuration, resulteert in een pull voor Key Vault.
Key Vault-verwijzingen maken
U kunt een Key Vault-verwijzing maken in De Azure-portal door naar Configuration Explorer>>Key Vault-verwijzing maken te gaan. Vervolgens kunt u een geheim selecteren waarnaar u wilt verwijzen vanuit een van de key vaults waar u toegang tot hebt. U kunt ook willekeurige Key Vault-verwijzingen maken op het tabblad Invoer . Voer in Azure Portal een geldige URI in.
U kunt ook een Key Vault-verwijzing maken via de Azure CLI met behulp van de volgende opdracht:
az appconfig kv set-keyvault \
--name <name-of-your-store> \
--key <key-name> \
--secret-identifier <URI-to-your-secret>
U kunt elke geheime id maken via de Azure CLI. Geheime id's vereisen alleen de indeling {vault}/{collection}/{name}/{version?}
waarin de versiesectie optioneel is.
Key Vault-verwijzingen gebruiken
U kunt de Azure-configuratie van Spring Cloud gebruiken om de bibliotheek te configureren. U kunt dezelfde referentie gebruiken om verbinding te maken met App Configuration om verbinding te maken met Azure Key Vault.
Niet-Key Vault-geheimen oplossen
De App Configuration-bibliotheek biedt een methode voor het lokaal oplossen van geheimen waaraan geen Key Vault is gekoppeld. Deze resolutie wordt gedaan via de KeyVaultSecretProvider
. De KeyVaultSecretProvider
naam wordt aangeroepen wanneer een TokenCredential
niet is opgegeven voor een Key Vault-verwijzing. De URI van de Key Vault-verwijzing wordt opgegeven en de geretourneerde waarde wordt de waarde van het geheim.
Waarschuwing
Het gebruik van een KeyVaultSecretProvider
overschrijft het automatische gebruik van de door het systeem toegewezen beheerde identiteit. Als u beide wilt gebruiken, moet u de URI's gebruiken KeyVaultCredentialProvider
en retourneren null
die moeten worden omgezet.
public class MySecretProvider implements KeyVaultSecretProvider {
@Override
public String getSecret(String uri) {
...
}
}
Functiebeheer
Functiebeheer biedt een manier voor Spring Boot-toepassingen om dynamisch toegang te krijgen tot inhoud. Functiebeheer heeft verschillende functies, zoals de volgende:
- Functievlagmen die inhoud kunnen in- of uitschakelen
- Functiefilters voor targeting wanneer inhoud wordt weergegeven
- Aangepaste functiefilters
- Functiepoorten voor het dynamisch inschakelen van eindpunten
U kunt functievlagmen inschakelen via de volgende configuratie:
spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled= true
Ingeschakelde functievlagmen worden geladen in het Spring-configuratiesysteem met het voorvoegsel feature-management
. U kunt ook functievlagmen registreren in het lokale configuratiebestand. Zie de sectie Functievlagdeclaratie voor meer informatie.
De eenvoudigste manier om functiebeheer te gebruiken, is door gebruik te maken van de spring-cloud-azure-feature-management
en spring-cloud-azure-feature-management-web
bibliotheken. Het verschil tussen de twee bibliotheken is dat spring-cloud-azure-feature-management-web
afhankelijk is van de spring-web
en spring-webmvc
bibliotheken om meer functies toe te voegen, zoals functiepoorten.
U kunt functievlagmen inschakelen met behulp van sleutel-/labelfilters. Standaard wordt een null
label, gezien als (No Label)
, toegewezen. U kunt de functievlagmen configureren die worden geladen door een labelfilter in te stellen, zoals wordt weergegeven in het volgende voorbeeld:
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
Basisprincipes van functiebeheer
Functievlaggen
Functievlagmen bestaan uit twee onderdelen: een naam en een lijst met functiefilters die worden gebruikt om de functie in te schakelen. Functievlagmen kunnen een booleaanse status aan/uit hebben, of ze kunnen een lijst met functiefilters hebben. Functievlagmen evalueren functiefilters totdat een functie wordt geretourneerd true
. Als er geen functiefilter wordt geretourneerd true
, wordt de functievlag geretourneerd false
.
Functiefilters
Functiefilters definiëren een scenario voor wanneer een functie moet worden ingeschakeld. Functiefilters worden synchroon geëvalueerd.
De functiebeheerbibliotheek wordt geleverd met vier vooraf gedefinieerde filters: AlwaysOnFilter, PercentageFilter, TimeWindowFilter en TargetingFilter.
U kunt aangepaste functiefilters maken. U kunt bijvoorbeeld een functiefilter gebruiken om een aangepaste ervaring te bieden voor klanten die een Microsoft Edge-browser gebruiken. U kunt de functies in dit functiefilter bijvoorbeeld aanpassen om een specifieke koptekst weer te geven voor de doelgroep van de Microsoft Edge-browser.
Declaratie van functievlaggen
De bibliotheek voor functiebeheer ondersteunt Azure-app Configuratie, samen met application.yml of bootstrap.yml als bronnen voor functievlagmen. Hier volgt een voorbeeld van de indeling die wordt gebruikt voor het instellen van functievlagmen in een application.yml-bestand :
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
In dit voorbeeld zijn de volgende functievlagmen beschikbaar:
feature-t
is ingesteld opfalse
. Deze instelling retourneert altijd de waarde van de functievlag.feature-u
wordt gebruikt met functiefilters. Deze filters worden gedefinieerd onder deenabled-for
eigenschap. In dit gevalfeature-u
heeft u één functiefilter aangeroepenRandom
, waarvoor geen configuratie is vereist, dus alleen de naameigenschap is vereist.feature-v
hiermee geeft u een functiefilter met de naamTimeWindowFilter
. Dit functiefilter kan parameters worden doorgegeven die moeten worden gebruikt als configuratie. In dit voorbeeld geeft eenTimeWindowFilter
, de begin- en eindtijd door waarin de functie actief is.feature-w
wordt gebruikt voor deAlwaysOnFilter
, die altijd evalueert .true
Hetevaluate
veld wordt gebruikt om de evaluatie van de functiefilters te stoppen en resulteert in het functiefilter dat altijd wordt geretourneerdfalse
.
Functievlagmen evalueren
De spring-cloud-azure-feature-management
bibliotheek biedt FeatureManager
om te bepalen of een functievlag is ingeschakeld. FeatureManager
biedt een asynchrone manier om de status van de vlag te controleren.
spring-cloud-azure-feature-management-web
bevat, samen met het opgeven FeatureManager
van, FeatureManagerSnapshot
bevat, waarmee de status van eerder geëvalueerde functievlagmen in de @RequestScope
cache wordt opgeslagen om te garanderen dat alle aanvragen dezelfde waarde retourneren. Daarnaast biedt @FeatureGate
de webbibliotheek, die webaanvragen kan blokkeren of omleiden naar verschillende eindpunten.
Controle van functievlag
FeatureManager
is een @Bean
object dat kan worden @Autowired
opgenomen of geïnjecteerd in @Component
typeobjecten. FeatureManager
heeft een methode isEnabled
die, wanneer de naam van een functievlag wordt doorgegeven, de status retourneert.
@Autowired
FeatureManager featureManager;
if (featureManager.isEnabled("feature-t")) {
// Do Something
}
Notitie
FeatureManger
heeft ook een asynchrone versie van isEnabled
de aangeroepen isEnabledAsync
.
Als u geen functiebeheer hebt geconfigureerd of als de functievlag niet bestaat, isEnabled
wordt altijd geretourneerd false
. Als een bestaande functievlag is geconfigureerd met een onbekend functiefilter, wordt er een FilterNotFoundException
gegenereerd. U kunt dit gedrag wijzigen om terug te keren false
door deze te fail-fast
configureren in false
. In de volgende tabel wordt het volgende beschreven fail-fast
:
Name | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
spring.cloud.azure.feature.management.fail-fast |
Als er een uitzondering optreedt, wordt er een RuntimeException gegenereerd. Als deze eigenschap is ingesteld op false , wordt in isEnabled plaats daarvan geretourneerd false . |
Nee | true |
Het enige verschil tussen FeatureManagerSnapshot
en FeatureManager
is de caching van resultaten in de @RequestScope
.
Functiepoort
Met de webbibliotheek voor functiebeheer kunt u vereisen dat een bepaalde functie is ingeschakeld om een eindpunt uit te voeren. U kunt deze vereiste instellen met behulp van de @FeatureGate
aantekening, zoals wordt weergegeven in het volgende voorbeeld:
@GetMapping("/featureT")
@FeatureGate(feature = "feature-t")
@ResponseBody
public String featureT() {
...
}
U hebt alleen toegang tot het featureT
eindpunt als 'feature-t' is ingeschakeld.
Afhandeling van uitgeschakelde acties
Wanneer een eindpunt wordt geblokkeerd omdat de functie die wordt opgegeven, is uitgeschakeld, DisabledFeaturesHandler
wordt aangeroepen. Standaard wordt een HTTP 404 geretourneerd. U kunt dit gedrag overschrijven door te implementeren DisabledFeaturesHandler
, zoals wordt weergegeven in het volgende voorbeeld:
@Component
public class MyDisabledFeaturesHandler implements DisabledFeaturesHandler {
@Override
public HttpServletResponse handleDisabledFeatures(HttpServletRequest request, HttpServletResponse response) {
...
return response;
}
}
Routering
Bepaalde routes kunnen toepassingsmogelijkheden beschikbaar maken die worden beveiligd door functies. Als een functie is uitgeschakeld, kunt u deze routes omleiden naar een ander eindpunt, zoals wordt weergegeven in het volgende voorbeeld:
@GetMapping("/featureT")
@FeatureGate(feature = "feature-t" fallback= "/oldEndpoint")
@ResponseBody
public String featureT() {
...
}
@GetMapping("/oldEndpoint")
@ResponseBody
public String oldEndpoint() {
...
}
Ingebouwde functiefilters
Er zijn enkele functiefilters die bij het spring-cloud-azure-feature-management
pakket worden geleverd. Deze functiefilters worden niet automatisch toegevoegd, maar u kunt ze instellen in een @Configuration
.
AlwaysOnFilter
Dit filter retourneert true
altijd . Zie de sectie functievlagdeclaratie voor een gebruiksvoorbeeld.
PercentageFilter
Telkens wanneer een gebruiker een aanvraag indient, kan de evaluatie PercentageFilter
een ander resultaat retourneren. U kunt deze inconsistentie omzeilen met behulp van de FeatureManagementSnapshot
functievlag die het resultaat van de functievlag per gebruiker in de cache opgeslagen. Deze mogelijkheid zorgt ervoor dat een gebruiker een consistente ervaring heeft, zelfs als ze de aanvraag opnieuw moeten verzenden.
feature-management:
feature-v:
enabled-for:
- name: PercentageFilter
parameters:
Value: 50
TimeWindowFilter
Dit filter biedt de mogelijkheid om een functie in te schakelen op basis van een tijdvenster. Als u alleen opgeeft End
, wordt de functie tot die tijd overwogen. Als u alleen opgeeft Start
, wordt de functie op alle punten na die tijd overwogen. Als u beide opgeeft, wordt de functie tussen de twee keer als geldig beschouwd.
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
Dit filter biedt de mogelijkheid om een functie in te schakelen voor een doelgroep. Zie de sectie targetingsectie voor een uitgebreide uitleg van targeting. De filterparameters bevatten een doelgroepobject dat gebruikers, groepen en een standaardpercentage van de gebruikersbasis beschrijft die toegang tot de functie moeten hebben. Voor elk groepsobject dat wordt vermeld in de doelgroep, is een percentage vereist dat het percentage van de leden van die groep definieert die toegang hebben tot de functie. Een gebruiker heeft de functie ingeschakeld in de volgende gevallen:
- De gebruiker wordt rechtstreeks in de sectie gebruikers opgegeven.
- De gebruiker bevindt zich in het opgenomen percentage van een van de groeps-implementaties.
- De gebruiker valt in het standaardpercentage voor de implementatie.
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
Aangepaste functiefilters
Het maken van een aangepast functiefilter biedt een manier om functies in te schakelen op basis van criteria die u definieert. Als u een aangepast functiefilter wilt maken, moet u de FeatureFilter
interface implementeren. FeatureFilter
heeft één methode evaluate
. Wanneer een functie aangeeft dat deze kan worden ingeschakeld met een functiefilter, wordt de evaluate
methode aangeroepen. Als evaluate
de functie wordt geretourneerd true
, betekent dit dat de functie moet worden ingeschakeld. Als de functie wordt geretourneerd false
, wordt de functiefilters nog steeds geëvalueerd totdat één filter wordt geretourneerd true
. Als alle filters worden geretourneerd false
, is de functie uitgeschakeld.
Functiefilters worden gedefinieerd als Spring Beans, dus ze worden gedefinieerd als @Component
of gedefinieerd in een @Configuration
.
@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;
}
}
Geparameteriseerde functiefilters
Voor sommige functiefilters zijn parameters vereist om te bepalen of een functie moet worden ingeschakeld. Een browserfunctiefilter kan bijvoorbeeld een functie inschakelen voor een bepaalde set browsers. Mogelijk wilt u een functie inschakelen voor Microsoft Edge- en Chrome-browsers, maar niet Voor Firefox. Als u deze situatie wilt instellen, kunt u een functiefilter ontwerpen om parameters te verwachten. Deze parameters worden opgegeven in de functieconfiguratie en in code en zijn toegankelijk via de FeatureFilterEvaluationContext
parameter van evaluate
. FeatureFilterEvaluationContext
heeft een eigenschap parameters
, een HashMap<String, Object>
.
Targeten
Het doel is een strategie voor functiebeheer waarmee ontwikkelaars geleidelijk nieuwe functies kunnen implementeren in hun gebruikersbestand. De strategie is gebaseerd op het concept van het richten van een set gebruikers die bekend staan als de doelgroep. Een doelgroep bestaat uit specifieke gebruikers, groepen en een aangewezen percentage van de gehele gebruikersbasis. De groepen die in de doelgroep zijn opgenomen, kunnen verder worden onderverdeeld in percentages van hun totale leden.
In de volgende stappen ziet u een voorbeeld van een progressieve implementatie voor een nieuwe bètafunctie:
- Individuele gebruikers Jeff en Alicia krijgen toegang tot de bètaversie.
- Een andere gebruiker, Mark, vraagt zich aan te kiezen en is inbegrepen.
- Twintig procent van een groep die bekend staat als Ring1-gebruikers, worden opgenomen in de bètaversie.
- Het aantal ring1-gebruikers dat in de bètaversie is opgenomen, wordt tot 100 procent opgestoten.
- Vijf procent van de gebruikersbasis is opgenomen in de bètaversie.
- Het implementatiepercentage wordt maximaal 100 procent opgestoten en de functie wordt volledig uitgerold.
Deze strategie voor het implementeren van een functie is ingebouwd in de bibliotheek via het opgenomen TargetingFilter
functiefilter.
Targeting in een toepassing
Een voorbeeldwebtoepassing die gebruikmaakt van het doelfunctiefilter is beschikbaar in het voorbeeldproject.
Als u de TargetingFilter
toepassing in een toepassing wilt gaan gebruiken, moet u deze toevoegen als een @Bean
ander functiefilter. TargetingFilter
is afhankelijk van een andere @Bean
die aan de toepassing TargetingContextAccessor
moet worden toegevoegd. Hiermee TargetingContextAccessor
kunt u de huidige TargetingContext
gebruiken voor het definiëren van de huidige gebruikers-id en groepen, zoals wordt weergegeven in het volgende voorbeeld:
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);
}
}
Evaluatieopties instellen
Er zijn opties beschikbaar om aan te passen hoe doelevaluatie wordt uitgevoerd in een bepaalde TargetingFilter
. U kunt tijdens het TargetingFilter
maken een optionele parameter TargetingEvaluationOptions
instellen.
@Bean
public TargetingFilter targetingFilter(MyTargetingContextAccessor contextAccessor) {
return new TargetingFilter(contextAccessor, new TargetingEvaluationOptions().setIgnoreCase(true));
}
Configuratie vernieuwen
Als u het vernieuwen van configuraties voor uw configuraties inschakelt, kunt u de meest recente waarden ophalen uit uw App Configuration-archief of -archieven zonder dat u de toepassing opnieuw hoeft te starten.
Als u vernieuwen wilt inschakelen, moet u bewaking inschakelen, samen met bewakingstriggers. Een bewakingstrigger is een sleutel met een optioneel label dat wordt gecontroleerd op waardewijzigingen om updates te activeren. De waarde van de bewakingstrigger kan elke waarde zijn, zolang deze verandert wanneer een vernieuwing nodig is.
Notitie
Elke bewerking die de ETag van een bewakingstrigger wijzigt, veroorzaakt een vernieuwing, zoals een wijziging van het inhoudstype.
spring:
cloud:
azure:
appconfiguration:
stores:
- monitoring:
enabled: true
triggers:
- key: [my-watched-key]
label: [my-watched-label]
Als u een configuratievernieuwing wilt activeren, wijzigt u de waarde van een sleutel in uw configuratiearchief. Werk vervolgens een van de horlogesleutels bij naar een nieuwe waarde. Met deze wijziging wordt het maken van een logboek geactiveerd. Als u bijvoorbeeld de waarde van /application/config.message
triggers wijzigt, wordt het volgende logboekbericht weergegeven:
INFO 17496 --- [TaskScheduler-1] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [config.message]
Nadat de toepassing het logboek heeft gegenereerd, worden alle @Bean
bestanden vernieuwd in het vernieuwingsbereik.
Notitie
Geannoteerde bonen zijn standaard @ConfigurationProperties
opgenomen in dit bereik.
Vernieuwen op basis van pull
De Spring-bibliotheken van App Configuration ondersteunen de mogelijkheid om periodiek te controleren op een vernieuwingsinterval voor wijzigingen die zijn aangebracht in de bewakingstriggers. Het vernieuwingsinterval is standaard ingesteld op 30 seconden. Nadat het vernieuwingsinterval is verstreken, worden alle triggers gecontroleerd in het opgegeven archief voor wijzigingen. Elke wijziging in de sleutel zorgt ervoor dat een vernieuwing wordt geactiveerd. Omdat de bibliotheken zijn geïntegreerd met het Spring Refresh-systeem, worden bij elke vernieuwing alle configuraties uit alle winkels opnieuw geladen. U kunt het vernieuwingsinterval instellen op een interval dat langer is dan 1 seconde. De ondersteunde eenheden voor het vernieuwingsinterval zijn s
respectievelijk seconden d
m
h
, minuten, uren en dagen. In het volgende voorbeeld wordt het vernieuwingsinterval ingesteld op 5 minuten:
spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 5m
Geautomatiseerd
Wanneer u de spring-cloud-azure-appconfiguration-config-web
bibliotheek gebruikt, controleert de toepassing automatisch op een vernieuwing wanneer een servlet-aanvraag plaatsvindt, met name ServletRequestHandledEvent
. De meest voorkomende manier waarop deze gebeurtenis wordt verzonden, is door aanvragen naar eindpunten in een @RestController
.
Handmatig
In toepassingen die alleen spring-cloud-azure-appconfiguration-config
worden gebruikt, zoals consoletoepassingen, kunt u handmatig een vernieuwing activeren door de methode aan refreshConfiguration
te roepenAppConfigurationRefresh
. AppConfigurationRefresh
is een @Bean
die u kunt injecteren in elke @Component
.
Omdat de bibliotheek gebruikmaakt van het configuratiesysteem van Spring, zorgt het activeren van een vernieuwing ook voor een vernieuwing van al uw configuraties, niet alleen voor het opnieuw laden van de configuraties uit uw Azure-app Configuratiearchief.
Push-gebaseerde vernieuwing
U kunt de spring-cloud-azure-appconfiguration-config-web
bibliotheek instellen voor het ontvangen van pushmeldingen van uw Azure-app Configuratiearchief om uw configuratiewaarden te vernieuwen. U kunt deze configuratie instellen via een Azure Event Grid-webhook, die u kunt configureren voor het verzenden van meldingen van wijzigingen naar opgegeven sleutels. Door de Spring Actuator-bibliotheek als een afhankelijkheid toe te voegen, kunt u de vernieuwingseindpunten van App Configuration beschikbaar maken. Er zijn twee verschillende eindpunten: appconfiguration-refresh
en appconfiguration-refresh-bus
. Deze eindpunten werken op dezelfde manier als hun tegenhangers refresh
en refresh-bus
, waarbij de app-configuratie-eindpunten het vernieuwingsinterval laten verlopen in plaats van een vernieuwing af te dwingen bij ontvangst. U kunt de refresh
en refresh-bus
, maar u kunt ze niet rechtstreeks verbinden met Azure Event Grid met een webhook, omdat ze een reactie in de installatie vereisen.
De appconfiguration-refresh
eigenschap verloopt het vernieuwingsinterval, zodat het resterende vernieuwingsinterval niet wordt gewacht voordat de volgende vernieuwingscontrole wordt uitgevoerd. De appconfiguration-refresh-bus
eigenschap verzendt een melding naar een verbonden berichtenservice, zoals Azure Service Bus, om alle exemplaren van een toepassing op de hoogte te stellen om te vernieuwen. In beide gevallen verloopt het niet volledig bij het vernieuwingsinterval, maar is deze uitgeschakeld met een kleine jitterhoeveelheid. Deze jitter zorgt ervoor dat elk exemplaar van uw toepassing niet tegelijkertijd probeert te vernieuwen.
management.endpoints.web.exposure.include= appconfiguration-refresh, appconfiguration-refresh-bus
Naast het beschikbaar maken van de vernieuwingseindpunten, is er een vereiste queryparameter toegevoegd voor beveiliging. Er is standaard geen tokennaam of -waarde ingesteld, maar het instellen hiervan is vereist om de eindpunten te kunnen gebruiken, zoals wordt weergegeven in het volgende voorbeeld:
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]
Webhook instellen
Als u een webhook wilt instellen, opent u het Azure-app Configuratiearchief en opent u Gebeurtenissen vanuit het navigatiemenu. Selecteer vervolgens Gebeurtenisabonnement. Stel de naam van uw gebeurtenis in en selecteer het eindpunttype dat webhook moet zijn. Als u Webhook selecteert, wordt er een eindpuntoptie weergegeven. Selecteer Select an endpoint (Een eindpunt selecteren). Uw eindpunt moet eruitzien als in het volgende voorbeeld: https://www.myaplication.com/actuator/appconfiguration-refresh?myTokenName=mySecret
.
Bevestig dat Selectie een installatiemelding naar de opgegeven URI verzendt en er een antwoord wordt verwacht. Als er geen antwoord wordt geretourneerd, mislukt de installatie. De azure-spring-cloud-appconfiguration-web
bibliotheekinstallatie voor eindpunten retourneert het juiste antwoord als het Azure-app Configuratiearchief is geconfigureerd voor de toepassing. Deze bevestiging kan op andere manieren worden verzonden. Zie De levering van webhook-gebeurtenissen voor meer informatie over webhooklevering.
Notitie
Deze validatie vindt alleen plaats bij het maken of wijzigen van het eindpunt.
U wordt ten zeerste aangeraden filters in te stellen, omdat anders een vernieuwing wordt geactiveerd na het maken en wijzigen van de sleutel.
Geforceerde client vernieuwen
U kunt de bibliotheek zo configureren dat alle configuraties met een vernieuwingsinterval worden geforceerd vernieuwd. In de volgende tabel wordt de refresh-interval
eigenschap beschreven:
Name | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
spring.cloud.azure.appconfiguration.refresh-interval |
De standaardtijd tussen vernieuwingen. Is een Duration . |
Nee | Nul |
Vernieuwen met spring.cloud.azure.appconfiguration.refresh-interval
controleert geen geconfigureerde watchsleutels. Deze eigenschap wordt gebruikt om ervoor te zorgen dat Key Vault-geheimen up-to-date blijven, omdat Azure-app Configuratie niet kan zien wanneer ze worden bijgewerkt.
Omdat Azure Key Vault het openbare en persoonlijke sleutelpaar van een certificaat als geheim opslaat, kan uw toepassing elk certificaat ophalen als key vault-verwijzing in App Configuration. Omdat certificaten periodiek moeten worden geroteerd, moeten clienttoepassingen net zo vaak worden bijgewerkt, wat kan worden gedaan met behulp van het vernieuwingsinterval van de client.
Functievlag vernieuwen
Als functievlagmen en bewaking beide zijn ingeschakeld, wordt het vernieuwingsinterval voor functievlagmen standaard ingesteld op 30 seconden. Nadat het vernieuwingsinterval is verstreken, worden alle functievlagmen gecontroleerd in het opgegeven archief op wijzigingen. Elke wijziging in de sleutel zorgt ervoor dat een vernieuwing wordt geactiveerd. Omdat de bibliotheken zijn geïntegreerd met het Spring Refresh-systeem, worden bij elke vernieuwing alle configuraties uit alle winkels opnieuw geladen. U kunt het vernieuwingsinterval instellen op een interval dat langer is dan 1 seconde. De ondersteunde eenheden voor het vernieuwingsinterval zijn s
respectievelijk seconden d
m
h
, minuten, uren en dagen. In het volgende voorbeeld wordt het vernieuwingsinterval ingesteld op 5 minuten:
spring.cloud.azure.appconfiguration.stores[0].monitoring.feature-flag-refresh-interval= 5m
Statusindicator
De clientbibliotheek wordt geleverd met een statusindicator waarmee wordt gecontroleerd of de verbinding met het Azure-app Configuratiearchief of -archieven in orde is. Als deze optie is ingeschakeld voor elk archief, krijgt deze een van de volgende statuswaarden:
- UP: de laatste verbinding is geslaagd.
- DOWN- De laatste verbinding heeft geresulteerd in een niet-200-foutcode. Deze status kan worden veroorzaakt door problemen, variërend van referenties die verlopen tot een serviceprobleem. De clientbibliotheek probeert automatisch opnieuw verbinding te maken met de store tijdens het volgende vernieuwingsinterval.
- NIET GELADEN: het configuratiearchief wordt vermeld in het lokale configuratiebestand, maar het configuratiearchief is niet geladen vanuit het bestand bij het opstarten. Het configuratiearchief is uitgeschakeld in het configuratiebestand of de configuratie of configuraties zijn niet geladen tijdens het opstarten terwijl de
fail-fast
configuratie voor het archief is ingesteld opfalse
.
U kunt de statusindicator inschakelen door de instelling in te stellen management.health.azure-app-configuration.enabled=true
.
Clientaanpassing
De App Configuration-bibliotheek maakt gebruik van de Azure SDK voor Java om verbinding te maken met Azure-app Configuratie en Azure Key Vault. Er zijn twee interfaces ConfigurationClientCustomizer
en SecretClientCustomizer
, beschikbaar om de clients te wijzigen. Elke interface heeft een customize
methode die in hun respectieve opbouwfunctie wordt gebruikt, samen met de String
waarde van de URI waarvoor de client wordt geconfigureerd, zoals wordt weergegeven in de volgende interfacedefinities:
public interface ConfigurationClientCustomizer {
public void setup(ConfigurationClientBuilder builder, String endpoint);
}
public interface SecretClientCustomizer {
public void setup(SecretClientBuilder builder, String endpoint);
}
Met deze interfaces kunnen de HTTP-client en de bijbehorende configuraties worden aangepast. In het volgende voorbeeld wordt de standaardwaarde HttpClient
vervangen door een andere die gebruikmaakt van een proxy voor al het verkeer dat wordt omgeleid naar App Configuration en Key Vault.
Notitie
De ConfigurationClientBuilder
en SecretClientBuilder
zijn al ingesteld voor gebruik wanneer ze worden doorgegeven aan customize
. Wijzigingen in de clients, inclusief de referenties en het beleid voor opnieuw proberen, overschrijven deze al.
U kunt deze configuratie ook uitvoeren met behulp van de Spring Cloud Azure-configuratie.
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();
}
}