Alkalmazáskonfiguráció támogatása

Ez a cikk a Spring Cloud Azure-alkalmazás konfigurációs kódtárát ismerteti. Ez a kódtár betölti a konfigurációkat és a funkciójelzőket a Azure-alkalmazás Konfigurációs szolgáltatásból. A kódtár absztrakciókat PropertySource hoz létre, hogy megfeleljenek a Spring-környezet által már létrehozott absztrakcióknak, például környezeti változóknak, parancssori konfigurációknak, helyi konfigurációs fájloknak stb.

A Spring a VMware által kifejlesztett nyílt forráskódú alkalmazás-keretrendszer, amely egyszerűsített, moduláris megközelítést biztosít a Java-alkalmazások létrehozásához. A Spring Cloud Azure egy nyílt forráskódú projekt, amely zökkenőmentes Spring-integrációt biztosít az Azure-szolgáltatásokkal.

Előfeltételek

Az Alkalmazáskonfigurációs áruház beállítása

Az alábbi paranccsal hozza létre a Azure-alkalmazás Konfigurációs tárat:

az appconfig create \
    --resource-group <your-resource-group> \
    --name <name-of-your-new-store> \
    --sku Standard

Ez a parancs létrehoz egy új, üres konfigurációs tárolót. A konfigurációkat az alábbi importálási paranccsal töltheti fel:

az appconfig kv import \
    --name <name-of-your-new-store> \
    --source file \
    --path <location-of-your-properties-file> \
    --format properties \
    --prefix /application/

Mielőtt betöltené őket, ellenőrizze a konfigurációkat. YAML-fájlokat úgy tölthet fel, hogy a formátumot YAML formátumra módosítja. Az előtagmező azért fontos, mert ez az ügyfélkódtár által betöltött alapértelmezett előtag.

Tárhasználat

Ha egy alkalmazásban szeretné használni a funkciót, spring boot-alkalmazásként kell létrehoznia. A függőség hozzáadásának legkényelmesebb módja a Spring Boot starter com.azure.spring:spring-cloud-azure-starter-appconfiguration-confighasználata. Az alábbi példa pom.xml fájl Azure-alkalmazás konfigurációt használ:

<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>7.4.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>

Az alábbi példa egy alapszintű Spring Boot-alkalmazást mutat be az alkalmazáskonfiguráció használatával:

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Ebben a példában az application.properties fájl a következő sort tartalmazza:

spring.config.import=azureAppConfiguration
spring.cloud.azure.appconfiguration.stores[0].endpoint=${CONFIG_STORE_ENDPOINT}

CONFIG_STORE_ENDPOINT az Azure App Configuration Store végponti URL-címével rendelkező környezeti változó.

Feljegyzés

A Microsoft az elérhető legbiztonságosabb hitelesítési folyamat használatát javasolja. Az ebben az eljárásban ismertetett hitelesítési folyamat, például adatbázisok, gyorsítótárak, üzenetkezelés vagy AI-szolgáltatások esetében, nagyon nagy megbízhatóságot igényel az alkalmazásban, és más folyamatokban nem jelenik meg kockázattal. Ezt a folyamatot csak akkor használja, ha a biztonságosabb lehetőségek, például a jelszó nélküli vagy kulcs nélküli kapcsolatokhoz szükséges felügyelt identitások lehetőségként nem állnak rendelkezésre. A helyi gépi műveletekhez előnyben részesítse a jelszó nélküli vagy kulcs nélküli kapcsolatok felhasználói identitásait.

Alapértelmezés szerint, ha nem ad meg semmilyen konfigurációt, a(z) /application/ karakterrel kezdődő konfigurációk (No Label) alapértelmezett címkével töltődnek be, hacsak nem állít be Spring-profilt, amely esetben az alapértelmezett címke a Spring-profilja.

Létrejön egy névvel ellátott /application/https://<name-of-your-store>.azconfig.io/ tulajdonságforrás, amely az adott tároló tulajdonságait tartalmazza. A kérelemben használt címke hozzá van fűzve a név végéhez. Ha nem állít be címkét, a karakter \0 üres helyként jelenik meg.

Konfiguráció betöltése

A kódtár egy vagy több alkalmazáskonfigurációs tároló betöltését támogatja. Ha egy kulcs több üzletben duplikálva van, az utolsó nyer.

spring.cloud.azure.appconfiguration.stores[0].endpoint=[first-store-endpoint]
spring.cloud.azure.appconfiguration.stores[1].endpoint=[second-store-endpoint]

Ebben a példában, ha mindkét tároló azonos konfigurációs kulccsal rendelkezik, a második tároló konfigurációja a legmagasabb prioritással rendelkezik.

Feljegyzés

Használhatja Azure-alkalmazás konfigurációs beállításokat, mint bármely más Spring-konfigurációt. További információ: Alapvető funkciók a Spring Boot dokumentációjában vagy rövid útmutató: Java Spring-alkalmazás létrehozása Azure-alkalmazás konfigurációval.

Konfigurációk kiválasztása

A könyvtár a konfigurációkat a kulcsuk és címkéjük alapján, illetve pillanatkép alapján tölti be. Ha nem használ kiválasztási módszert, a függvénytár betölti az összes kulcsot a(z) /application/ előtaggal és a(z) \0 címkével, amely az Azure Portalon (No Label) néven jelenik meg.

Az alapértelmezett kulcsszűrő a következő /application/*. Az alapértelmezett címkeszűrő az \0, amely az Azure Portalon látható módon (No Label) jelenik meg. Ha egy Spring-profilt állít be, és nem ad meg címkét, az alapértelmezett címke a Spring-profil, amely a ${spring.profiles.active}.

A konfigurációkat egy adott pillanatképből is betöltheti. A pillanatkép a konfiguráció statikus nézete egy adott időpontban. Amikor betölt egy pillanatképet, betölti a konfigurációkat a pillanatkép létrehozásakor, és addig nem frissülnek, amíg létre nem hoz egy új pillanatképet, és be nem töltődik belőle. A pillanatképnek a kompozíció típusának Keykell lennie. A tulajdonság használatával megadhatja a betöltendő pillanatképet snapshot :


You can configure which configurations are loaded by selecting different key and label filters:

```properties
spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter=[my-key]
spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=[my-label]
spring.cloud.azure.appconfiguration.stores[0].selects[1].snapshot=[snapshot-name]

Feljegyzés

A pillanatkép-kijelölés nem kombinálható kulcs- és címkeszűrőkkel. Pillanatkép kiválasztásakor a rendszer betölti a pillanatkép összes kulcsát.

A key-filter tulajdonság a következő szűrőket támogatja:

Kulcsszűrő Hatály
* Bármely kulccsal megegyezik.
abc Megfelel egy abc nevű kulcsnak.
abc* A következővel abckezdődő kulcsneveknek felel meg: .
abc,xyz A kulcsneveket illeszt abc vagy xyz. Legfeljebb öt vesszővel tagolt érték lehet.

A label-filter tulajdonság a következő szűrőket támogatja:

Címke Leírás
* Bármilyen címkével egyezik, beleértve a \0.
\0 Megfelel a(z) null címkéknek, amelyek (No Label) címkeként jelennek meg az Azure portálon.
1.0.0 Pontosan egyezik a címkével 1.0.0 .
1.0.* Megegyezik a következővel kezdődő címkékkel 1.0.*: .
,1.0.0 Megfelel a címkéknek null és 1.0.0. Legfeljebb öt vesszővel tagolt érték lehet.

Ha a YAML-et címkeszűrőkkel használja, és címkével nem rendelkező konfigurációkat szeretne betölteni, és további konfigurációkat szeretne más címkékkel ellátni, akkor egy üreset ,kell tartalmaznia. Például a ,dev egyezik a \0 és dev címkékkel. Ebben az esetben a címkeszűrőt egyetlen idézőjellel kell körülvenni. Ez az érték lehetővé teszi, hogy a konfigurációt először címke nélkül töltse be, majd az adott címkékkel rendelkező konfigurációkat ugyanabban a szűrőben:

spring:
  cloud:
    azure:
      appconfiguration:
        stores:
        - selects:
          - label-filter: ',1.0.0'

Feljegyzés

Nem kombinálhatók a * és a , elemek a szűrőkben. Ebben az esetben további kiválasztási értéket kell használnia.

Ha a címkeszűrőben használja * , és több, azonos kulccsal rendelkező konfiguráció is betöltődik, azok betűrendben lesznek betöltve, és a címke utolsó betűrendben lesz használva.

Spring-profilok

Alapértelmezés szerint spring.profiles.active az összes kiválasztott konfiguráció alapértelmezett label-filter értéke. Ezt a funkciót felülbírálhatja a következővel label-filter: . A Spring Profiles a következő példában label-filter${spring.profiles.active} által használható, ahogy az alábbi példa mutatja:

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

Az elsőben label-filter a könyvtár először betölti az összes \0 címkével rendelkező konfigurációt, majd az összes konfigurációt, amely megfelel a Spring Profiloknak. A spring profiles prioritást élvez a \0 konfigurációkkal szemben, mert a végén vannak.

A második label-filter esetben a sztring _local hozzá van fűzve a Spring Profiles végéhez, bár csak az utolsó Spring Profile-hoz, ha több is van.

Letiltott üzletek

A konfiguráció spring.cloud.azure.appconfiguration.enabledhasználatával letilthatja az összes konfigurációs tároló betöltését. A spring.cloud.azure.appconfiguration.stores[0].enabled konfigurációval letilthat egy adott tárolót.

Feljegyzés

Ha egészségügyi metrikákat használ, továbbra is megjelenik az áruházak listája, de az érték NOT LOADED. A betöltött tulajdonságforrások ellenőrzésekor továbbra is megjelennek a listában, de nem tartalmaznak értékeket. Ezt a viselkedést a spring.config.import beállított tulajdonság okozza. Ha azureAppConfiguration nincs beállítva spring.config.import esetében, akkor nem jelennek meg értékek.

Hitelesítés

A kódtár az Azure Identity Library által támogatott összes identitásformát támogatja. Kapcsolati sztringekhez és felügyelt identitáshoz való autentikációt konfiguráció segítségével végezhet.

Feljegyzés

A Microsoft az elérhető legbiztonságosabb hitelesítési folyamat használatát javasolja. Az ebben az eljárásban ismertetett hitelesítési folyamat, például adatbázisok, gyorsítótárak, üzenetkezelés vagy AI-szolgáltatások esetében, nagyon nagy megbízhatóságot igényel az alkalmazásban, és más folyamatokban nem jelenik meg kockázattal. Ezt a folyamatot csak akkor használja, ha a biztonságosabb lehetőségek, például a jelszó nélküli vagy kulcs nélküli kapcsolatokhoz szükséges felügyelt identitások lehetőségként nem állnak rendelkezésre. A helyi gépi műveletekhez előnyben részesítse a jelszó nélküli vagy kulcs nélküli kapcsolatok felhasználói identitásait.

A kapcsolati sztringen keresztüli hitelesítés a legegyszerűbb beállítási forma, bár nem ajánlott. Az áruház kapcsolati karakterláncát az alábbi paranccsal érheted el:

az appconfig credential list --name <name-of-your-store>

Ezután beállíthatja a spring.cloud.azure.appconfiguration.stores[0].connection-string tulajdonságot a kapcsolati karakterláncra. Ha ezt a módszert használja, javasoljuk, hogy a helyi konfigurációs fájlban található kapcsolati sztringet olyan helyőrző értékre állítsa, amely egy környezeti változóhoz van leképezve. Ezzel a módszerrel elkerülheti a kapcsolati sztring forrásvezérlőhöz való hozzáadását.

Spring Cloud Azure-konfiguráció

A spring cloud Azure-konfigurációval konfigurálhatja a kódtárat. A kódtár konfigurálásához az alábbi tulajdonságokat használhatja:

spring.cloud.azure.appconfiguration.stores[0].endpoint= <URI-of-your-configuration-store>

Ha csak a végpont van beállítva, az ügyfélkódtár a DefaultAzureCredential parancsot használja a hitelesítéshez.

Hozzá kell rendelnie a konfigurációk olvasásához használt identitást. Ezt a feladatot a következő paranccsal hozhatja létre:

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>

Feljegyzés

Végpontonként csak egy hitelesítési módszert definiálhat: kapcsolati sztring, felhasználó által hozzárendelt identitást vagy jogkivonat hitelesítő adatait. Ha kombinálni és párosítani szeretne, ConfigurationClientCustomizer segítségével módosíthatja a ConfigurationClientBuilder-et különböző módszerek használatára.

Feljegyzés

A Microsoft az elérhető legbiztonságosabb hitelesítési folyamat használatát javasolja. Az ebben az eljárásban ismertetett hitelesítési folyamat, például adatbázisok, gyorsítótárak, üzenetkezelés vagy AI-szolgáltatások esetében, nagyon nagy megbízhatóságot igényel az alkalmazásban, és más folyamatokban nem jelenik meg kockázattal. Ezt a folyamatot csak akkor használja, ha a biztonságosabb lehetőségek, például a jelszó nélküli vagy kulcs nélküli kapcsolatokhoz szükséges felügyelt identitások lehetőségként nem állnak rendelkezésre. A helyi gépi műveletekhez előnyben részesítse a jelszó nélküli vagy kulcs nélküli kapcsolatok felhasználói identitásait.

Georeplikáció

A kódtár támogatja Azure-alkalmazás Konfiguráció georeplikációs funkcióját. Ez a funkció lehetővé teszi, hogy más helyekre replikálja az adatokat. Ez a funkció a magas rendelkezésre állás és a vészhelyreállítás szempontjából hasznos.

Minden létrehozott replika rendelkezik egy dedikált végpontkal. Ha az alkalmazás több földrajzi helyen található, frissítheti az alkalmazás minden üzembe helyezését egy helyen, hogy a replikához az adott helyhez közelebb csatlakozzon, ami segít minimalizálni az alkalmazás és az alkalmazáskonfiguráció közötti hálózati késést. Mivel minden replika külön kérelemkvótával rendelkezik, ez a beállítás az alkalmazás méretezhetőségét is segíti, miközben többrégiós elosztott szolgáltatásra nő.

Alapértelmezés szerint a könyvtár automatikusan felderíti a konfigurációs tár összes létező replikáját. Ha egy kérés a megadott tárba kerül, és sikertelen, a tár automatikusan újrapróbálkozza a kérést az elérhető replikákon.

A feladatátvétel akkor következhet be, ha a könyvtár a következő feltételek valamelyikét észleli:

  • A szolgáltatás nem elérhető állapotkóddal rendelkező (HTTP 500-as vagy annál magasabb) válaszokat fogad egy végpontról.
  • Hálózati csatlakozási problémákat tapasztal.
  • A kérelmek korlátozva vannak (HTTP-állapotkód: 429).

Miután a megadott tároló ismét online állapotba kerül, a könyvtár automatikusan újra megpróbálja teljesíteni a kérést a megadott tárolón.

Ha szabályozni szeretné a feladatátvételi viselkedést, manuálisan megadhatja a feladatátvételhez használni kívánt tárolók listáját.

spring.cloud.azure.appconfiguration.stores[0].endpoints[0]=[your primary store endpoint]
spring.cloud.azure.appconfiguration.stores[0].endpoints[1]=[your replica store endpoint]

vagy

spring.cloud.azure.appconfiguration.stores[0].connection-strings[0]=[your primary store connection string]
spring.cloud.azure.appconfiguration.stores[0].connection-strings[1]=[your replica store connection string]

Ha az összes megadott replikavégpont sikertelen, az erőforrástár megpróbál csatlakozni az elsődleges tár automatikusan felderített replikáihoz.

A replikációt letilthatja a beállítással spring.cloud.azure.appconfiguration.stores[0].replica-discovery-enabled=false.

Konfigurációs tároló létrehozása georeplikációs szolgáltatással

A konfigurációs tár replikáinak létrehozásához használhatja az Azure CLI-t vagy az Azure Portalt. Az alábbi példa az Azure CLI használatával hoz létre replikát az USA 2. keleti régiójában:

az appconfig replica create --location --name --store-name [--resource-group]

Kulcsértékek

Azure-alkalmazás Konfiguráció több kulcsértéktípust támogat, amelyek közül néhány speciális funkciókkal rendelkezik. Azure-alkalmazás konfiguráció beépített támogatást nyújt a JSON-tartalomtípushoz, a Spring-helyőrzőkhöz és a Key Vault-hivatkozásokhoz.

Kulcsok levágása

Ha kulcsokat tölt be az Azure App Configurationból, a kódtár alapértelmezés szerint levágja a kulcs által definiált spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter előtagot. Ha például rendelkezik egy elnevezett kulccsal /application/config.message és egy kulcsszűrővel /application/*, a kódtár levágja az előtagot /application/ , és betölti a kulcsot config.message. Ennek a vágásnak köszönhetően könnyebben hivatkozhat a kulcsokra a kódban.

Ezt a viselkedést felül lehet bírálni azzal, hogy spring.cloud.azure.appconfiguration.stores[0].trim-key-prefix[0] más értékre van állítva. Ha ezt a tulajdonságot üres karakterláncra állítja, ezzel kikapcsolja a vágás funkciót, és a kulcs a teljes névvel töltődik be.

Helyőrzők

A könyvtár támogatja azokat a konfigurációkat, amelyek ${}-stílusú környezeti helyőrzőket használnak. Ha Azure-alkalmazás konfigurációs kulcsra hivatkozik helyőrzővel, távolítsa el az előtagokat a hivatkozásból. Például a /application/config.message hivatkozik a ${config.message} néven.

Feljegyzés

Az eltávolított előtag megegyezik az értékkel spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter. A levágott előtag módosítható egy érték spring.cloud.azure.appconfiguration.stores[0].trim-key-prefix[0]beállításával.

JSON

JSON-kulcsértékeket az Alkalmazáskonfigurációban hozhat létre. Amikor kulcsértékeket tölt be az Azure App Configurationból, a konfigurációszolgáltató automatikusan átalakítja a konfigurációs beállításokat összetett objektumokká egy @ConfigurationPropertiesadott területen belül. Vegyük például a JSON-kulcsot /application/config.colors a következő értékkel:

{
    "key": "font",
    "label": null,
    "value": "{\r\n\t\"size\": 12,\r\n\t\"color\": \"red\"\r\n}",
    "content_type": "application/json"
}

Ez a JSON-tartalom a kulcs-érték betöltését { size: 12, color: "red" }eredményezi.

@ConfigurationProperties(prefix = "config")
public class MyConfigurations {

    private Font font;

}

Feljegyzés

A konfigurációszolgáltató a (JSONC) spring-cloud-azure-appconfiguration-configverziójától kezdve lehetővé teszi a tartalomtípusú kulcsértékek megjegyzéseitapplication/json.

Key Vault-hivatkozások

Azure-alkalmazás konfiguráció és kódtárai támogatják a Key Vaultban tárolt titkos kódokra való hivatkozásokat. Az Alkalmazáskonfigurációban kulcsokat hozhat létre olyan értékekkel, amelyek a Key Vaultban tárolt titkos kulcsokhoz vannak megfeleltetve. A titkos kulcsok továbbra is biztonságosak maradnak a Key Vaultban, de az alkalmazás betöltésekor ugyanúgy érheti el őket, mint bármely más konfiguráció.

Az alkalmazás az ügyfélszolgáltatóval kéri le a Key Vault-referenciákat, ugyanúgy, mint az Alkalmazáskonfigurációban tárolt többi kulcs esetében. Mivel az ügyfél a kulcsokat Key Vault-hivatkozásként ismeri fel, ezért azok egyedi tartalomtípussal rendelkeznek, és az ügyfél a Key Vault-hoz csatlakozva lekéri az értékeiket az ön részére.

Feljegyzés

A Key Vault csak egyenként teszi lehetővé a titkos adatok lekérését, így az App Configuration-ben tárolt minden Key Vault-referencia egy lekérést eredményez a Key Vault felé.

Key Vault-hivatkozások létrehozása

Key Vault-referenciát az Azure portálon a Konfigurációs böngészőben > a > opcióval. Ezután kiválaszthat egy titkos kulcsot, amelyre hivatkozni szeretne bármelyik olyan Kulcstartóból, amelyhez hozzáférése van. A Bevitel lapon tetszőleges Key Vault-hivatkozásokat is létrehozhat. Az Azure Portalon adjon meg egy érvényes URI-t.

Key Vault-referenciát az Azure CLI-vel is létrehozhat az alábbi paranccsal:

az appconfig kv set-keyvault \
    --name <name-of-your-store> \
    --key <key-name> \
    --secret-identifier <URI-to-your-secret>

Bármilyen titkos azonosítót létrehozhat az Azure CLI-vel. A titkos azonosítók csak azt a formátumot {vault}/{collection}/{name}/{version?} igénylik, amelyben a verziószakasz nem kötelező.

Key Vault-hivatkozások használata

A spring cloud Azure-konfigurációval konfigurálhatja a kódtárat. Az Azure Key Vaulthoz való csatlakozáshoz használhatja ugyanazt a hitelesítő adatot, amelyet az alkalmazáskonfigurációhoz használ.

Ugyanúgy hozhat létre SecretClientCustomizer, mint ahogyan ConfigurationClientCustomizer-t, hogy saját hitelesítési módszerét biztosítsa.

Nem Key Vault-titkok feloldása

Az App Configuration könyvtár egy metódust biztosít a Key Vault-hivatkozások feloldásának felülbírálásához. Használhatja például a dev környezetben lévő titkos kódok helyi feloldására. Ez a határozat a KeyVaultSecretProvider történt meg. Ha KeyVaultSecretProvidermeg van adva, a rendszer minden key vault-referenciára meghívja. Ha getSecret nem null értéket ad vissza, az titkos értékként lesz használva. Ellenkező esetben a Key Vault referenciája a szokásos módon lesz feloldva.

public class MySecretProvider implements KeyVaultSecretProvider {

    @Override
    public String getSecret(String uri) {
        ...
    }

}

Funkciókezelés

A funkciókezelés lehetővé teszi, hogy a Spring Boot-alkalmazások dinamikusan elérhessék a tartalmakat. A funkciókezelés különböző funkciókkal rendelkezik, például a következőkkel:

  • Tartalom engedélyezésére vagy letiltására alkalmas funkciójelzők
  • Funkciószűrők a tartalom megjelenítésekor történő célzáshoz
  • Testreszabott funkciószűrők
  • Funkciókapuk a végpontok dinamikus engedélyezéséhez

A funkciójelzőket a következő konfigurációval engedélyezheti:

spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled= true

Az engedélyezett funkciójelzők az előtaggal feature-managementtöltődnek be a Spring konfigurációs rendszerbe. A funkciójelzőket a helyi konfigurációs fájlban is regisztrálhatja. További információt a Funkciójelölő deklaráció szakaszában talál.

A funkciókezelés használatának legegyszerűbb módja a spring-cloud-azure-feature-management és a spring-cloud-azure-feature-management-web könyvtárak használata. A két könyvtár közötti különbség az, hogy a spring-cloud-azure-feature-management-web függ a spring-web és a spring-webmvc könyvtáraktól, hogy több funkciót, például funkciókapukat adjon hozzá.

Alapértelmezés szerint a \0 címkével (No Label) látható összes funkciójelző betöltésre kerül. Az alábbi példában látható módon egy címkeszűrő beállításával konfigurálhatja a betöltött funkciójelzőket:

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

Funkciójelző telemetriai adatai

Ha engedélyezve van a funkciójelző telemetria, az Azure App Configuration szolgáltató további tulajdonságokat injektál a funkciójelző telemetriai adataihoz. Ezek a tulajdonságok további kontextust biztosítanak a funkciójelzőről és annak kiértékeléséről:

  • AllocationID: A funkciójelző foglalásának állapotát jelképező egyedi azonosító.
  • ETag: A funkciójelző aktuális ETagje.
  • FeatureFlagReference: Hivatkozás a funkciójelzőre a következő formátumban <your_store_endpoint>kv/<feature_flag_key>: . Ha egy címke jelen van, a hivatkozás lekérdezési paraméterként tartalmazza: <your_store_endpoint>kv/<feature_flag_key>?label=<feature_flag_label>.

A szolgáltatáskezelés alapjai

Funkciójelölők

A funkciójelzők több részből állnak, köztük egy névből és a funkció bekapcsolásához használt funkciószűrők listájából. A funkciójelzők logikai állapota be- vagy kikapcsolható, vagy a funkciószűrők listájával is rendelkezhetnek. A funkciójelölők addig értékelik a funkciószűrőket, amíg az egyik vissza nem ad true. Ha egyik funkciószűrő sem ad vissza értéket true, akkor a funkciójelző zászló visszaadja false.

Funkciószűrők

A funkciószűrők meghatároznak egy forgatókönyvet, amikor engedélyezni kell egy funkciót. A funkciószűrők kiértékelése szinkron módon történik.

A szolgáltatásfelügyeleti kódtár négy előre definiált szűrővel rendelkezik: AlwaysOnFilter, PercentageFilter, TimeWindowFilter és TargetingFilter.

Egyéni funkciószűrőket is létrehozhat. Egy funkciószűrővel például egyéni élményt biztosíthat a Microsoft Edge böngészőt használó ügyfelek számára. A funkciószűrő funkcióit testreszabhatja például a Microsoft Edge böngésző célközönségének egy adott fejlécének megjelenítéséhez.

Funkciójelző deklarációja

A szolgáltatásfelügyeleti kódtár támogatja az Azure-alkalmazáskonfigurációt, valamint application.yml vagy application.properties szolgáltatást a funkciójelzők forrásaként. Íme egy példa a funkciójelölők application.yml fájlban való beállításához használt formátumra:

feature-management:
  feature_flags:
  - id: feature-t
    enabled: false
  - id: feature-u
    conditions:
      client_filters:
      - name: Random
  - id: feature-v
    conditions:
      client_filters:
      - name: TimeWindowFilter
        parameters:
          Start: "Wed, 01 May 2019 13:59:59 GMT"
          End: "Mon, 01 July 2019 00:00:00 GMT"

  - id: feature-w
    evaluate: false
    conditions:
      client_filters:
      - name: AlwaysOnFilter

Ebben a példában a következő funkciójelölők szerepelnek:

  • feature-t beállítás értéke : false. Ez a beállítás mindig a funkciójelző értékét adja vissza.
  • feature-u funkciószűrőkkel használható. Ezek a szűrők a tulajdonság alatt vannak definiálva enabled-for . Ebben az esetben a feature-u egy funkciószűrővel rendelkezik Random, amely nem igényel konfigurációt, ezért csak a név szükséges.
  • feature-v a nevű funkciószűrőt TimeWindowFilter adja meg. Ennek a funkciószűrőnek paraméterek adhatók át konfigurációként való használatra. Ebben a példában egy TimeWindowFilter a kezdési és befejezési időket adja meg bemenetként, amikor a szolgáltatás aktív.
  • feature-w-t használják az AlwaysOnFilter-hez, amely mindig true-re értékelődik ki. A evaluate mező a funkciószűrők kiértékelésének leállítására szolgál, és a funkciószűrő mindig visszatér false.

Funkciójelzők kiértékelése

A spring-cloud-azure-feature-management kódtár segítségével FeatureManager megállapíthatja, hogy engedélyezve van-e egy funkciójelző. FeatureManager aszinkron módon ellenőrzi a jelölő állapotát.

A spring-cloud-azure-feature-management-weba FeatureManagernyújtása mellett tartalmazza a FeatureManagerSnapshot-t is, amely gyorsítótárazza a korábban kiértékelt funkciójelzők állapotát a @RequestScope-ban, így garantálva, hogy minden kérés ugyanazt az értéket adja vissza. Emellett a webtár is biztosít @FeatureGate, amely letilthatja vagy átirányíthatja a webes kérelmeket különböző végpontokra.

Funkciójelző ellenőrzése

FeatureManager olyan @Bean, amely @Autowired lehet, vagy @Component típusú objektumokba illeszthető. FeatureManager olyan metódussal isEnabled rendelkezik, amely a funkciójelző nevének átadásakor visszaadja az állapotát.

@Autowired
FeatureManager featureManager;

...

if (featureManager.isEnabled("feature-t")) {
    // Do Something
}

Feljegyzés

FeatureManager rendelkezik a(z) isEnabled aszinkron verziójával, amit isEnabledAsync-nek hívnak.

Szolgáltatásfelügyeleti konfiguráció nélkül, vagy ha a funkciójelző nem létezik, a isEnabled mindig false-t ad vissza. Ha egy meglévő funkciójelző ismeretlen funkciószűrővel van konfigurálva, akkor a rendszer egy jelölőt FilterNotFoundException ad meg. A viselkedést úgy változtathatja meg, hogy a false-t fail-fast-re konfigurálja, így a false-t adja vissza. Az alábbi táblázat a következőket ismerteti fail-fast:

Név Leírás Kötelező Alapértelmezett
spring.cloud.azure.feature.management.fail-fast Kivétel esetén a rendszer egy RuntimeException hibát ad ki. Ha ez a tulajdonság be van állítva false, akkor a isEnabledfalse-t ad vissza helyette. Nem true

Az egyetlen különbség a FeatureManagerSnapshot és FeatureManager között az, hogy az eredményeket a @RequestScope -ben gyorsítótárazhassuk.

Funkciókapu

A szolgáltatásfelügyeleti webtárban megkövetelheti, hogy egy adott funkció engedélyezve legyen egy végpont végrehajtásához. Ezt a követelményt a @FeatureGate széljegyzet használatával állíthatja be, ahogyan az alábbi példában látható:

@GetMapping("/featureT")
@FeatureGate(feature = "feature-t")
@ResponseBody
public String featureT() {
    ...
}

A végpontot csak akkor érheti el, ha a featureT "feature-t" engedélyezve van.

Letiltott műveletkezelés

Ha egy végpont le van tiltva, mert az általa megadott funkció le van tiltva, DisabledFeaturesHandler a rendszer meghívja. Alapértelmezés szerint a rendszer egy HTTP 404-et ad vissza. A DisabledFeaturesHandler implementálásával felülbírálhatja ezt a viselkedést, ahogy az a következő példában is látható.

@Component
public class MyDisabledFeaturesHandler implements DisabledFeaturesHandler {

    @Override
    public HttpServletResponse handleDisabledFeatures(HttpServletRequest request, HttpServletResponse response) {
        ...
        return response;
    }

}
Útválasztás

A funkciók bizonyos útvonalakat nyithatnak meg, amelyek elérhetővé teszik az alkalmazás képességeit. Ha egy funkció le van tiltva, átirányíthatja ezeket az útvonalakat egy másik végpontra, ahogyan az alábbi példában látható:

@GetMapping("/featureT")
@FeatureGate(feature = "feature-t" fallback= "/oldEndpoint")
@ResponseBody
public String featureT() {
    ...
}

@GetMapping("/oldEndpoint")
@ResponseBody
public String oldEndpoint() {
    ...
}

Beépített funkciószűrők

Van néhány funkciószűrő, amelyek a spring-cloud-azure-feature-management csomaghoz tartoznak. Ezek a funkciószűrők automatikusan hozzáadódnak.

AlwaysOnFilter

Ez a szűrő mindig ad vissza true. Használati példaként tekintse meg a funkciójelző deklarálási szakaszát.

Százalékszűrő

PercentageFilter az egyes ellenőrzések során eltérő eredményt adhat vissza. Az inkonzisztenciát FeatureManagementSnapshot segítségével kerülheti meg, amely a funkciózászló eredményét az adott kéréshez gyorsítótárazza.

feature-management:
  feature_flags:
  - name: feature-v
    conditions:
      client_filters:
      - name: PercentageFilter
        parameters:
          Value: 50

Időablak Szűrő

Ez a szűrő lehetővé teszi egy szolgáltatás időkereten alapuló engedélyezését. Ha csak a End-t adja meg, a funkció addig be van kapcsolva. Ha csak Start megadja, a funkció az adott időpont után minden időpontban bekapcsoltnak tekintett. Ha mindkettőt megadja, a szolgáltatás a két időpont között érvényesnek minősül.

feature-management:
  feature_flags:
  - name: feature-v
    conditions:
      client_filters:
      - name: TimeWindowFilter
        parameters:
          Start: "Wed, 01 May 2019 13:59:59 GMT"
          End: "Mon, 01 July 2019 00:00:00 GMT"

Ez a szűrő az ismétlődő időablak-szűrőket is támogatja. Támogatja a napi és heti ismétlődéseket, valamint a lejárati időt.

feature-management:
  feature_flags:
  - name: feature-v
    conditions:
      client_filters:
      - name: TimeWindowFilter
        parameters:
          Start: "Mon, 01 July 2019 00:00:00 GMT"
          End: "Mon, 01 July 2019 12:00:00 GMT"
          Recurrence:
            Pattern:
              Type: Weekly
              Interval: 1
              FirstDayOfWeek: Sunday
              DaysOfWeek:
              - Monday
              - Wednesday

Ez az ismétlődési minta minden héten hétfőn és szerdán történik 00:00:00 GMT és 12:00:00 GMT között, és nem jár le.

feature-management:
  feature_flags:
  - name: feature-v
    conditions:
      client_filters:
      - name: TimeWindowFilter
        parameters:
          Start: "Mon, 01 July 2019 00:00:00 GMT"
          End: "Mon, 01 July 2019 12:00:00 GMT"
          Recurrence:
            Pattern:
              Type: Daily
              Interval: 2
            Range:
              Type: EndDate
              EndDate: "Fri, 15 Aug 2025 07:00:00 GMT"

Ez az ismétlődési minta minden második nap 00:00:00 GMT és 12:00:00 GMT között történik a befejezési dátumig.

Célzószűrő

Ez a szűrő lehetővé teszi egy szolgáltatás engedélyezését a célközönség számára. A célzás részletes magyarázatát a célzás szakaszában találja. A szűrőparaméterek közé tartozik egy célközönségobjektum, amely a felhasználókat, csoportokat és a felhasználói bázis azon alapértelmezett százalékos arányát írja le, amelyeknek hozzáféréssel kell rendelkezniük a szolgáltatáshoz. A célközönségben felsorolt összes csoportobjektumhoz szükség van egy százalékra, amely meghatározza a csoport azon tagjainak százalékos arányát, amelyek hozzáférnek a funkcióhoz. A felhasználó számára a funkció a következő esetekben engedélyezett:

  • A felhasználó közvetlenül a felhasználók szakaszában van megadva.
  • A felhasználó szerepel a csoportos bevezetések bármelyikének százalékos arányában.
  • A felhasználó az alapértelmezett bevezetési százalékhoz tartozik.
feature-management:
  feature_flags:
  - name: target
    conditions:
      client_filters:
      - name: targetingFilter
        parameters:
          users:
          - Jeff
          - Alicia
          groups:
          - name: Ring0
            rollout-percentage: 100
          - name: Ring1
            rolloutPercentage: 100
          default-rollout-percentage: 50

Egyéni funkciószűrők

Egyéni szolgáltatásszűrő létrehozása lehetővé teszi a szolgáltatások engedélyezését az Ön által megadott feltételek alapján. Egyéni funkciószűrő létrehozásához implementálnia kell a FeatureFilter felületet. FeatureFilter egyetlen metódussal evaluaterendelkezik. Ha egy szolgáltatás megadja, hogy egy funkciószűrővel engedélyezhető legyen, a evaluate metódus meghívása történik. Ha evaluate visszaadja true, az azt jelenti, hogy a funkciót engedélyezni kell. Ha visszaadja false, a funkciószűrők kiértékelése mindaddig folytatódik, amíg vissza nem tér true. Ha az összes szűrő visszatér false, akkor a funkció ki van kapcsolva.

A funkciószűrők Spring Beans-ként vannak definiálva, tehát vagy @Component-ként vagy @Configuration-ben vannak definiálva.

@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;
    }

}

Paraméteres funkciószűrők

Egyes funkciószűrőkhöz paraméterek szükségesek annak meghatározásához, hogy be kell-e kapcsolni egy funkciót. Előfordulhat például, hogy egy böngészőfunkció-szűrő bekapcsol egy funkciót egy bizonyos böngészőkészlethez. Előfordulhat, hogy engedélyezni szeretne egy funkciót a Microsoft Edge- és Chrome-böngészőkben, a Firefoxban azonban nem. A helyzet beállításához létrehozhat egy funkciószűrőt, amely paramétereket vár. Ezek a paraméterek a szolgáltatáskonfigurációban és a kódban lesznek megadva, és a FeatureFilterEvaluationContextevaluateparaméteren keresztül érhetők el. FeatureFilterEvaluationContext van egy tulajdonsága parameters, amely egy Map<String, Object>.

Célcsoportkezelés

A célzás egy funkciókezelési stratégia, amely lehetővé teszi a fejlesztők számára, hogy fokozatosan új funkciókat vezessenek be a felhasználói bázisukra. A stratégia a célközönségként ismert felhasználók egy csoportjának megcélzására épül. A célközönség meghatározott felhasználókból, csoportokból és a teljes felhasználói bázis meghatározott százalékából áll. A közönségbe felvett csoportok további bontásban, a teljes tagok százalékos arányára bonthatók.

Az alábbi lépések egy új bétaverziós funkció fokozatos bevezetésére mutatnak be példát:

  1. Az egyes felhasználók Jeff és Alicia kapnak hozzáférést a bétaverzióhoz.
  2. Egy másik felhasználó, Mark, kéri, hogy jelentkezzen be, és szerepel benne.
  3. A "Ring1" nevű csoport felhasználóinak húsz százaléka szerepel a bétaverzióban.
  4. A bétaverzióban szereplő "Ring1" felhasználók száma 100%-ra nő.
  5. A felhasználói bázis öt százaléka szerepel a bétaverzióban.
  6. A bevezetési százalék akár 100 százalék is lehet, és a funkció teljesen ki lett adva.

Ez a funkció üzembehelyre kerülési stratégiája a beépített TargetingFilter funkciószűrőn keresztül van beépítve a kódtárba.

Célzás egy alkalmazásban

A célzási funkciószűrőt használó példa webalkalmazás a példaprojektben érhető el.

Ahhoz, hogy elkezdhesse használni a TargetingFilter egy alkalmazásban, hozzá kell adnia azt @Bean egy funkciószűrőként, mint ahogy bármelyik másikat is. TargetingFilter egy másik @Bean-ra támaszkodik, amelyet az alkalmazáshoz TargetingContextAccessor hozzá kell adni. Ez TargetingContextAccessor lehetővé teszi az aktuális felhasználóazonosító és -csoportok meghatározásához használni kívánt aktuális TargetingContext érték meghatározását, ahogyan az alábbi példában látható:

public class MyTargetingContextAccessor implements TargetingContextAccessor {

    @Override
    public void configureTargetingContext(TargetingContext context) {
        context.setUserId("Jeff");
        ArrayList<String> groups = new ArrayList<String>();
        groups.add("Ring0");
        context.setGroups(groups);
    }

}

A kiértékelési lehetőségek célzása

Lehetőségek állnak rendelkezésre a célzási értékelés végrehajtásának testreszabására egy adott TargetingFilter esetén. A létrehozás során megadhat egy opcionális paramétertTargetingEvaluationOptionsTargetingFilter.

    @Bean
    public TargetingFilter targetingFilter(MyTargetingContextAccessor contextAccessor) {
        return new TargetingFilter(contextAccessor, new TargetingEvaluationOptions().setIgnoreCase(true));
    }

Konfiguráció frissítése

A konfigurációk konfigurációfrissítésének engedélyezésével az alkalmazás újraindítása nélkül lekérheti a legújabb értékeket az Alkalmazáskonfigurációs áruházból vagy -tárolóból.

A frissítés engedélyezéséhez engedélyeznie kell a monitorozást és a monitorozási eseményindítókat. A monitorozási eseményindító egy olyan kulcs, amely opcionális címkével rendelkezik, amelyet a rendszer figyel a frissítések aktiválásához szükséges értékmódosításokért. A monitorozási eseményindító értéke bármilyen érték lehet, amennyiben megváltozik, amikor frissítésre van szükség.

Feljegyzés

Minden olyan művelet, amely módosítja a monitorozási eseményindító ETag-azonosítóját, frissítést okoz, például tartalomtípus-módosítást.

spring:
  cloud:
    azure:
      appconfiguration:
        stores:
        - monitoring:
          enabled: true
          triggers:
          - key: [my-watched-key]
            label: [my-watched-label]

Konfigurációfrissítés aktiválásához módosítsa egy kulcs értékét a konfigurációs tárban. Ezután frissítse az egyik órakulcsot egy új értékre. Ez a módosítás elindítja a napló létrehozását. Például a /application/config.message értékének módosítása kiváltja a következő naplóüzenetet:

INFO 17496 --- [TaskScheduler-1] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [config.message]

Miután az alkalmazás létrehozta a naplót, frissíti a frissítési hatókörben lévő összes @Bean elemet.

Feljegyzés

Alapértelmezés szerint a @ConfigurationProperties jegyzetekkel ellátott babok szerepelnek ebben a hatókörben.

Lekéréses alapú frissítés

Az alkalmazáskonfigurációs spring-kódtárak támogatják a figyelési eseményindítókon végrehajtott módosítások frissítési időközeinek rendszeres ellenőrzését. Alapértelmezés szerint a frissítési időköz 30 másodpercre van állítva. A frissítési időköz eltelte után, amikor frissítési kísérlet történik, az adott tárolóban lévő összes eseményindítót ellenőrzik a módosítások szempontjából. A kulcs módosítása esetén a frissítés aktiválódik. Mivel a kódtárak integrálva vannak a Spring frissítési rendszerrel, minden frissítés újra betölti az összes konfigurációt az összes áruházból. A frissítési időközt tetszőleges, 1 másodpercnél hosszabb időközre állíthatja be. A frissítési időköz támogatott egységei: s másodpercek, m percek, h órák és d napok. Az alábbi példa 5 percre állítja a frissítési időközt:

spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 5m

Automatizált

A kódtár használatakor az spring-cloud-azure-appconfiguration-config-web alkalmazás automatikusan ellenőrzi a frissítést, amikor egy servlet-kérés történik, különösen ServletRequestHandledEvent. Az esemény küldésének leggyakoribb módja, hogy az a végpontokra kéréseket küld @RestController.

Kézikönyv

Azokban az alkalmazásokban, amelyek csak spring-cloud-azure-appconfiguration-config-t használnak, mint a konzolalkalmazások, manuálisan indíthat frissítést a AppConfigurationRefreshrefreshConfiguration metódusának meghívásával. AppConfigurationRefresh egy @Bean, amelyet be tudsz injektálni bármelyik @Component-be.

Mivel a kódtár a Spring konfigurációs rendszerét használja, a frissítés aktiválása az összes konfiguráció frissítését eredményezi, nem csak az Azure App Configuration Store-ból származó konfigurációk újratöltését.

Feljegyzés

Ez a módszer már nem ajánlott, de jelenleg is támogatott.

Beállíthatja, hogy a spring-cloud-azure-appconfiguration-config-web könyvtár push értesítéseket kapjon az Azure App Configuration store-ból a konfigurációs értékek frissítésének céljából. Ezt a konfigurációt egy Azure Event Grid Web Hook használatával állíthatja be, amely konfigurálható úgy, hogy értesítéseket küldjön a megadott kulcsok módosításairól. Ha függőségként hozzáadja a Spring Actuator-kódtárat, közzéteheti az alkalmazáskonfiguráció frissítési végpontjait. Két különböző végpont létezik: appconfiguration-refresh és appconfiguration-refresh-bus. Ezek a végpontok hasonlóan működnek a megfelelőikhez refresh és refresh-bus. Az alkalmazáskonfigurációs végpontok lehetővé teszik, hogy a frissítési időköz lejárjon ahelyett, hogy frissítést kényszerítenek, amikor fogadnak valamit. Továbbra is használhatja az refresh és refresh-bus, de nem csatlakoztathatja őket közvetlenül az Azure Event Gridhez webhook használatával, mert a beállításhoz válaszra van szükség.

A appconfiguration-refresh tulajdonság lejártatja a frissítési időközt, így a fennmaradó frissítési időközt nem várják meg a következő frissítés előtt. A appconfiguration-refresh-bus tulajdonság értesítést küld egy csatlakoztatott üzenetküldő szolgáltatásnak, például az Azure Service Busnak, amely értesíti egy alkalmazás összes frissítési példányát. Mindkét esetben nem jár le teljesen a frissítési időközön belül, de kis mennyiségű jitter ki van kapcsolva. Ez a jitter biztosítja, hogy az alkalmazás minden példánya ne kíséreljen meg egyszerre frissíteni.

management.endpoints.web.exposure.include= appconfiguration-refresh, appconfiguration-refresh-bus

A frissítési végpontok felfedése mellett a kódtárnak szüksége van egy lekérdezési paraméterre a biztonság érdekében. Alapértelmezés szerint nincs jogkivonat neve vagy értéke, de be kell állítania egyet a végpontok használatára, ahogy az az alábbi példában látható:

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]

Webes horgok beállítása

Webes horog beállításához nyissa meg a Azure-alkalmazás Konfigurációs tárat, és nyissa meg az Események parancsot a navigációs menüből. Ezután válassza az Esemény-előfizetés lehetőséget. Adja meg az esemény nevét, és válassza ki a webhook végponttípusát. A Web Hook kiválasztásakor megjelenik egy végpontbeállítás . Válassza a Végpont kiválasztása lehetőséget. A végpontnak a következő példához hasonlóan kell kinéznie: https://www.myaplication.com/actuator/appconfiguration-refresh?myTokenName=mySecret.

A Kiválasztás megerősítése beállítási értesítést küld a megadott URI-hoz, és elvárja a választ. Ha nem ad vissza választ, a telepítés meghiúsul. A azure-spring-cloud-appconfiguration-web végpontok kódtárbeállítása a megfelelő választ adja vissza, ha a Azure-alkalmazás konfigurációs tár az alkalmazáshoz van konfigurálva. Ezt a visszaigazolást más módon is elküldheti. A webhook kézbesítéséről további információt a Webhook eseménykézbesítésében talál.

Feljegyzés

Ez az ellenőrzés csak a végpont létrehozásakor vagy módosításakor történik.

Javasoljuk, hogy állítson be szűrőket, mert ellenkező esetben a rendszer minden kulcs létrehozása és módosítása után elindít egy frissítést.

Kényszerített ügyfélfrissítés

A kódtár úgy konfigurálható, hogy frissítési időközzel kényszerítse az összes konfiguráció frissítését. A következő táblázat a tulajdonságot refresh-interval ismerteti:

Név Leírás Kötelező Alapértelmezett
spring.cloud.azure.appconfiguration.refresh-interval A frissítések közötti szokásos időtartam. Ez egy Duration. Nem null

A spring.cloud.azure.appconfiguration.refresh-interval frissítés nem ellenőrzi a konfigurált órakulcsokat. Ez a tulajdonság biztosítja, hogy a Key Vault titkos kulcsai naprakészek legyenek, mert Azure-alkalmazás konfiguráció nem tudja megállapítani, hogy mikor frissülnek.

Mivel az Azure Key Vault titkos kulcsként tárolja a tanúsítvány nyilvános és titkos kulcspárját, az alkalmazás bármely tanúsítványt lekérhet Key Vault-referenciaként az Alkalmazáskonfigurációban. Mivel a tanúsítványokat rendszeres időközönként kell elforgatni, az ügyfélalkalmazásoknak ugyanolyan gyakran kell frissülnie, ami az ügyfél frissítési időközével végezhető el.

Funkciójelző frissítése

Ha a funkciójelölők és a figyelés is engedélyezve van, akkor alapértelmezés szerint a funkciójelölők frissítési időköze 30 másodpercre van állítva. Amikor a frissítési időköz véget ér, a rendszer ellenőrzi az adott tár összes funkciójelzőjét a módosításokhoz. A kulcs módosítása esetén a frissítés aktiválódik. Mivel a kódtárak integrálva vannak a Spring frissítési rendszerrel, minden frissítés újra betölti az összes konfigurációt az összes áruházból. A frissítési időközt tetszőleges, 1 másodpercnél hosszabb időközre állíthatja be. A frissítési időköz támogatott egységei: s másodpercek, m percek, h órák és d napok. Az alábbi példa 5 percre állítja a frissítési időközt:

spring.cloud.azure.appconfiguration.stores[0].monitoring.feature-flag-refresh-interval= 5m

Állapotjelző

Az ügyfél-könyvtár állapotjelzővel rendelkezik, amely ellenőrzi, hogy az Azure App Configuration tárolóhoz vagy tárolókhoz való kapcsolat egészséges-e. Ha az egyes tárolók esetében engedélyezve van, az alábbi állapotértékek egyikét adja meg:

  • UP – Az utolsó kapcsolat sikeres volt.
  • DOWN – Az utolsó kapcsolat nem 200-as hibakódot eredményezett. Ez az állapot az olyan problémák miatt alakulhat ki, mint a hitelesítési adatokat érintő lejárat vagy a szolgáltatási probléma. Az ügyfélkódtár a következő frissítési időközön automatikusan újra megpróbál csatlakozni az áruházhoz.
  • NINCS BETÖLTVE – A konfigurációs tár a helyi konfigurációs fájlban szerepel, de a konfigurációs tár nem lett betöltve a fájlból indításkor. A konfigurációs tároló le van tiltva a konfigurációs fájlban, vagy a konfiguráció vagy konfigurációk indításkor nem töltődtek be, miközben a fail-fast tároló konfigurációja false volt beállítva.

Az állapotjelzőt úgy engedélyezheti, hogy a management.health.azure-app-configuration.enabled=true beállítást megadja.

Ügyfél-specifikus testreszabás

Az alkalmazáskonfigurációs kódtár a Java-hoz készült Azure SDK-t használja a Azure-alkalmazás Konfigurációhoz és az Azure Key Vaulthoz való csatlakozáshoz. Két felület, ConfigurationClientCustomizer és SecretClientCustomizer, lett megadva az ügyfelek módosításához. Minden interfész rendelkezik egy customize metódussal, amely megkapja a megfelelő szerkesztőt és azt az URI értéket, amelyhez az ügyfél konfigurálva van, ahogy az az alábbi interfészdefiníciókban látható:

public interface ConfigurationClientCustomizer {
    public void customize(ConfigurationClientBuilder builder, String endpoint);
}

public interface SecretClientCustomizer {
    public void customize(SecretClientBuilder builder, String endpoint);
}

Ezek a felületek lehetővé teszik a HTTP-ügyfél és konfigurációi testreszabását. Az alábbi példa lecseréli az alapértelmezett HttpClient értéket egy másikra, amely proxyt használ az Alkalmazáskonfiguráció és a Key Vault felé irányuló összes forgalomhoz.

Feljegyzés

Az ConfigurationClientBuilder és SecretClientBuilder már be van állítva a használatra, amikor átkerül a customize-be. Az ügyfelek módosításai, beleértve a hitelesítő adatokat és az újrapróbálkozási szabályzatot, felülbírálják a már meglévő alapértelmezett értékeket.

Ezt a konfigurációt a Spring Cloud Azure-konfigurációval is elvégezheti.

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();
    }

}