Aracılığıyla paylaş


Uygulama yapılandırma desteği

Bu makalede Spring Cloud Azure Uygulaması Yapılandırma kitaplığı açıklanmaktadır. Bu kitaplık, Azure Uygulaması Yapılandırma hizmetinden yapılandırmaları ve özellik bayraklarını yükler. Kitaplık, Ortam değişkenleri, komut satırı yapılandırmaları PropertySource , yerel yapılandırma dosyaları gibi Spring ortamı tarafından önceden oluşturulmuş soyutlamalarla eşleşecek soyutlamalar oluşturur.

Spring, VMware tarafından geliştirilen ve Java uygulamaları oluşturmaya yönelik basitleştirilmiş, modüler bir yaklaşım sağlayan bir açık kaynak uygulama çerçevesidir. Spring Cloud Azure, Azure hizmetleriyle sorunsuz Spring tümleştirmesi sağlayan açık kaynak bir projedir.

Önkoşullar

Uygulama Yapılandırması mağazanızı ayarlama

Azure Uygulaması Yapılandırma deponuzu oluşturmak için aşağıdaki komutu kullanın:

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

Bu komut yeni, boş bir yapılandırma deposu oluşturur. Aşağıdaki içeri aktarma komutunu kullanarak yapılandırmalarınızı karşıya yükleyebilirsiniz:

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

Yapılandırmalarınızı yüklemeden önce onaylayın. Biçimi YAML olarak değiştirerek YAML dosyalarını karşıya yükleyebilirsiniz. ön ek alanı, istemci kitaplığı tarafından yüklenen varsayılan ön ek olduğundan önemlidir.

Kitaplık kullanımı

Özelliği bir uygulamada kullanmak için Spring Boot uygulaması olarak oluşturabilirsiniz. Bağımlılığı eklemenin en kullanışlı yolu Spring Boot starter com.azure.spring:spring-cloud-azure-starter-appconfiguration-configiledir. Aşağıdaki örnek pom.xml dosyası Azure Uygulaması Yapılandırması'nı kullanır:

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

Not

Spring Boot 2.x kullanıyorsanız, sürümünü olarak 4.19.0ayarladığınızdan spring-cloud-azure-dependencies emin olun. Bu ürün reçetesi için kullanılan sürüm hakkında daha fazla bilgi için bkz . Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım.

Aşağıdaki örnekte, Uygulama Yapılandırması kullanan temel bir Spring Boot uygulaması gösterilmektedir:

@SpringBootApplication
@RestController
public class Application {

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

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

Bu örnek için bootstrap.properties dosyası aşağıdaki satırı içerir:

spring.cloud.azure.appconfiguration.stores[0].connection-string=${CONFIG_STORE_CONNECTION_STRING}

CONFIG_STORE_CONNECTION_STRING, Azure Uygulaması Yapılandırma Deponuzun bağlantı dizesi sahip bir ortam değişkenidir. aşağıdaki komutu kullanarak bağlantı dizesi erişebilirsiniz:

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

Varsayılan olarak, hiçbir yapılandırma ayarlanmadıysa, ile başlayan /application/ yapılandırmalar Spring Profili ayarlanmadığı (No Label) sürece varsayılan etiketiyle yüklenir ve bu durumda varsayılan etiket Spring Profilinizdir. Depo boş olduğundan hiçbir yapılandırma yüklenmez, ancak Azure Uygulaması Yapılandırma Özellik Kaynağı yine oluşturulur.

adlı /application/https://<name-of-your-store>.azconfig.io/ bir özellik kaynağı, bu deponun özelliklerini içeren oluşturulur. İstekte kullanılan etiket adın sonuna eklenir. Etiket ayarlı değilse, karakter \0 boş bir boşluk olarak bulunur.

Yapılandırma yükleniyor

Kitaplık, bir veya birden çok Uygulama Yapılandırması deposunun yüklenmesini destekler. Bir anahtarın birden çok depoda çoğaltılması durumunda, tüm depoların yüklenmesi en yüksek öncelikli depo yapılandırmasının yüklenmesine neden olur. Sonuncusu kazanır. Bu işlem aşağıdaki örnekte gösterilmiştir:

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

Örnekte, hem birinci hem de ikinci depolar aynı yapılandırmaya sahipse, ikinci depodaki yapılandırma en yüksek önceliğe sahiptir ve sonuncusu kazanır.

Not

Azure Uygulaması Yapılandırma ayarlarını diğer spring yapılandırmaları gibi kullanabilirsiniz. Daha fazla bilgi için Spring Boot belgelerindeki Temel Özellikler veya Hızlı Başlangıç: Azure Uygulaması Yapılandırması ile Java Spring uygulaması oluşturma bölümüne bakın.

Yapılandırmaları seçme

Yapılandırmalar, anahtarları ve etiketleri tarafından yüklenir. Varsayılan olarak, anahtarla /application/ başlayan yapılandırmalar yüklenir. Varsayılan etiket şeklindedir ${spring.profiles.active}. Ayarlı değilse ${spring.profiles.active} etiketli null yapılandırmalar yüklenir. Etiket, null Azure portalında olduğu gibi (No Label) görünür.

Aşağıdaki örnekte gösterildiği gibi farklı anahtar ve etiket filtreleri seçerek yüklenen yapılandırmaları yapılandırabilirsiniz:

spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter=[my-key]
spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=[my-label]

key-filter özelliği aşağıdaki filtreleri destekler:

Anahtar filtresi Etki
* Herhangi bir anahtarla eşleşir.
abc adlı abcbir anahtarla eşleşir.
abc* ile başlayan anahtar adlarıyla abceşleşir.
abc,xyz Anahtar adları abc veya xyzile eşleşir. Virgülle ayrılmış beş değerle sınırlıdır.

label-filter özelliği aşağıdaki filtreleri destekler:

Etiket Açıklama
* dahil olmak üzere \0herhangi bir etiketle eşleşir.
\0 Azure portalında olduğu gibi (No Label) görünen etiketlerle eşleşirnull.
1.0.0 Etiketle 1.0.0 tam olarak eşleşir.
1.0.* ile başlayan etiketlerle 1.0.*eşleşir.
,1.0.0 Etiketlerle ve 1.0.0ile null eşleşir. Virgülle ayrılmış beş değerle sınırlıdır.

YAML'yi etiket filtreleriyle kullanıyorsanız ve ile nullbaşlamanız gerekiyorsa, aşağıdaki örnekte gösterildiği gibi etiket filtresinin tek tırnak içine alınması gerekir:

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

Not

Filtrelerde ile , birleştiremezsiniz*. Bu durumda ek bir seçme değeri kullanmanız gerekir.

Bahar Profilleri

Varsayılan olarak, spring.profiles.active seçilen tüm yapılandırmalar için varsayılan label-filter olarak ayarlanır. kullanarak label-filterbu işlevi geçersiz kılabilirsiniz. Aşağıdaki örnekte gösterildiği gibi kullanarak içindeki label-filter ${spring.profiles.active}Spring Profillerini kullanabilirsiniz:

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

İlkinde label-filter, etiketli null tüm yapılandırmalar yüklenir ve ardından Spring Profilleri ile eşleşen tüm yapılandırmalar yüklenir. Spring Profillerinin, sonunda oldukları için yapılandırmalara göre null önceliği vardır.

İkincisinde label-filterdize _local , Spring Profillerinin sonuna eklenir, ancak yalnızca son Spring Profiline eklenir.

Devre dışı bırakılmış depolar

yapılandırmasını spring.cloud.azure.appconfiguration.enabledkullanarak tüm yapılandırma depoları için yüklemeyi devre dışı bırakabilirsiniz. Yapılandırma ile tek bir depoyu spring.cloud.azure.appconfiguration.stores[0].enabled devre dışı bırakabilirsiniz.

Depoları devre dışı bırakmanın yanı sıra, depoları yüklenemezse devre dışı bırakılacak şekilde yapılandırabilirsiniz. Bu yapılandırma için kullanın spring.cloud.azure.appconfiguration.stores[0].fail-fast. olarak ayarlanarak falseRuntimeException devre dışı bırakıldığındafail-fast, uygulama deposunun hiçbir yapılandırma yüklenmeden devre dışı bırakılmasına neden olur. Bir yapılandırma deposu başlangıçta devre dışı bırakılırsa, yenilemeden sonra değişiklikler denetlenemez. Ayrıca, yapılandırmalar güncelleştirilirse bu kaynaktan değer yüklemeye yönelik bir girişim yoktur.

Yenileme denetimi sırasında veya yapılandırmaları yeniden yüklemeye çalışırken bir RuntimeException hata oluşursa, yenileme denemesi sona erer ve geçtikten refresh-interval sonra yeniden denener.

Kimlik Doğrulaması

Kitaplık, Azure Kimlik Kitaplığı tarafından desteklenen tüm kimlik biçimlerini destekler. bağlantı dizesi ve yönetilen kimlik yapılandırması aracılığıyla kimlik doğrulaması yapabilirsiniz.

Connection string

bağlantı dizesi aracılığıyla kimlik doğrulaması, kurulumu yapılan en basit formdur. Aşağıdaki komutu kullanarak bir mağazanın bağlantı dizesi erişebilirsiniz:

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

Ardından özelliğini bağlantı dizesi olarak ayarlayabilirsinizspring.cloud.azure.appconfiguration.stores[0].connection-string. Yerel yapılandırma dosyasındaki bağlantı dizesi bir ortam değişkeniyle eşlenecek yer tutucu değere ayarlamanızı kesinlikle öneririz. Bu yaklaşım, kaynak denetimine bağlantı dizesi eklemekten kaçınmanızı sağlar.

Spring Cloud Azure yapılandırması

Kitaplığı yapılandırmak için Spring Cloud Azure yapılandırmasını kullanabilirsiniz. Kitaplığı yapılandırmak için aşağıdaki özellikleri kullanabilirsiniz:

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

Yalnızca uç nokta ayarlandığında, istemci kitaplığı kimlik doğrulaması için DefaultAzureCredential kullanır. kimlik DefaultAzureCredential doğrulaması için aşağıdaki yöntemleri kullanır:

  • Ortam kimlik bilgileri
  • Yönetilen Kimlik kimlik bilgileri
  • Azure Geliştirici CLI kimlik bilgileri
  • IntelliJ kimlik bilgileri
  • Azure CLI kimlik bilgileri
  • Azure PowerShell kimlik bilgileri

Yapılandırmaları okumak için sistem tarafından atanan kimlik gibi bir kimlik atamanız gerekir. Aşağıdaki komutu kullanarak bu atamayı oluşturabilirsiniz:

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>

Not

Uç nokta başına tek bir kimlik doğrulama yöntemi tanımlayabilirsiniz: bağlantı dizesi, kullanıcı tarafından atanan kimlik veya belirteç kimlik bilgileri. Karıştırmanız ve eşleştirmeniz gerekiyorsa, farklı bir yöntem kullanan depoları değiştirmek için kullanabilirsiniz ConfigurationClientCustomizer .

Coğrafi çoğaltma

Kitaplık, Azure Uygulaması Yapılandırmasının coğrafi çoğaltma özelliğini destekler. Bu özellik, verilerinizi başka konumlara çoğaltmanızı sağlar. Bu özellik, yüksek kullanılabilirlik ve olağanüstü durum kurtarma için kullanışlıdır.

Oluşturduğunuz her çoğaltmanın ayrılmış bir uç noktası vardır. Uygulamanız birden çok coğrafi konumda bulunuyorsa, uygulamanızın her dağıtımını bir konumda güncelleştirerek bu konuma daha yakın çoğaltmaya bağlanabilirsiniz ve bu da uygulamanızla Uygulama Yapılandırması arasındaki ağ gecikmesini en aza indirmeye yardımcı olur. Her çoğaltmanın ayrı istek kotası olduğundan, bu kurulum uygulamanızın ölçeklenebilirliğine yardımcı olurken çok bölgeli dağıtılmış bir hizmete de yardımcı olur.

Kitaplık aşağıdaki koşullardan herhangi birini gözlemlerse yük devretme gerçekleşebilir:

  • Hizmet kullanılamıyor durum kodu (HTTP 500 veya üzeri) içeren yanıtları bir uç noktadan alır.
  • Ağ bağlantısı sorunlarıyla karşılaşır.
  • İstekler kısıtlandı (HTTP durum kodu 429).

Coğrafi çoğaltma ile yapılandırma deposu oluşturma

Yapılandırma deponuzun çoğaltmasını oluşturmak için Azure CLI'yı veya Azure portalını kullanabilirsiniz. Aşağıdaki örnek, Doğu ABD 2 bölgesinde bir çoğaltma oluşturmak için Azure CLI'yi kullanır:

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

Yapılandırma deposu çoğaltmasını kullanma

Bir çoğaltma oluşturduktan sonra, bunu uygulamanızda kullanabilirsiniz. Kaynak depoda olduğu gibi, Microsoft Entra Id veya bağlantı dizesi kullanarak çoğaltmanıza bağlanabilirsiniz.

Çoğaltmanıza bağlanmak için Microsoft Entra Kimliğini kullanmak için, aşağıdaki örnekte gösterildiği gibi yapılandırma deposu örneklerinizi listelemeniz endpoints gerekir:

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

Çoğaltmalarınız kadar uç noktayı listeleyebilirsiniz. Kitaplık, uç noktalara listelendikleri sırayla bağlanmaya çalışır. Kitaplık bir çoğaltmaya bağlanamıyorsa, listede bir sonrakini dener. Bir süre geçtikten sonra kitaplık tercih edilen uç noktalara yeniden bağlanmayı dener.

Anahtar değerleri

Azure Uygulaması Yapılandırması, bazılarında yerleşik özel özellikler bulunan birden çok anahtar değeri türünü destekler. Azure Uygulaması Yapılandırması JSON içerik türü, Spring yer tutucuları ve Key Vault başvuruları için yerleşik desteğe sahiptir.

Yer tutucular

Kitaplık, -style ortam yer tutucularıyla ${}yapılandırmaları destekler. Yer tutucusu olan bir Azure Uygulaması Yapılandırma anahtarına başvururken, başvurudan ön ekleri kaldırın. Örneğin, /application/config.message olarak ${config.message}başvurulur.

Not

Kaldırılan ön ek değeriyle spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filtereşleşir.

JSON

İçerik türüne application/json sahip yapılandırmalar JSON nesneleri olarak işlenir. Bu özellik, bir yapılandırmayı içindeki @ConfigurationPropertieskarmaşık bir nesneyle eşlemenizi sağlar. Örneğin, aşağıdaki değere sahip JSON anahtarını /application/config.colors göz önünde bulundurun:

{
 "Red": {
  "value": [255, 0, 0]
 },
 "Blue": {
  "value": [0, 255, 0]
 },
 "Green": {
  "value": [0, 0, 255]
 }
}

Bu anahtar aşağıdaki kodla eşler:

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

    private Map<String, Color> colors;

}

Key Vault başvuruları

Azure Uygulaması Yapılandırması ve kitaplıkları Key Vault'ta depolanan gizli dizilere başvurmayı destekler. Uygulama Yapılandırması'da, Key Vault'ta depolanan gizli dizilerle eşleyen değerlerle anahtarlar oluşturabilirsiniz. Gizli diziler Key Vault'ta güvenli bir şekilde depolanır, ancak yüklendikten sonra diğer yapılandırmalarla aynı şekilde erişilebilir.

Uygulamanız, Uygulama Yapılandırması depolanan diğer anahtarlarda olduğu gibi Key Vault başvurularını almak için istemci sağlayıcısını kullanır. İstemci anahtarları Key Vault başvuruları olarak tanıdığından, benzersiz bir içerik türüne sahiptir ve istemci key vault'a bağlanarak sizin için değerlerini alır.

Not

Key Vault, gizli dizilerin tek seferde yalnızca bir kez alınmasına izin verdiğinden, Uygulama Yapılandırması depolanan her Key Vault başvurusu Key Vault'a karşı bir çekmeyle sonuçlanabilir.

Key Vault başvuruları oluşturma

Azure portalında, Yapılandırma gezgini>Key Vault başvurusu oluşturma bölümüne giderek bir Key Vault başvurusu oluşturabilirsiniz.> Ardından, erişiminiz olan anahtar kasalarından herhangi birinden başvurmak üzere bir gizli dizi seçebilirsiniz. Giriş sekmesinden rastgele Key Vault başvuruları da oluşturabilirsiniz. Azure portalında geçerli bir URI girin.

Aşağıdaki komutu kullanarak Azure CLI aracılığıyla bir Key Vault başvurusu da oluşturabilirsiniz:

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

Azure CLI aracılığıyla herhangi bir gizli dizi tanımlayıcısı oluşturabilirsiniz. Gizli dizi tanımlayıcıları yalnızca sürüm bölümünün isteğe bağlı olduğu biçimi {vault}/{collection}/{name}/{version?} gerektirir.

Key Vault başvurularını kullanma

Kitaplığı yapılandırmak için Spring Cloud Azure yapılandırmasını kullanabilirsiniz. Azure Key Vault'a bağlanmak için Uygulama Yapılandırması bağlanmak için kullanılan kimlik bilgilerini kullanabilirsiniz.

Key Vault dışı gizli dizileri çözme

Uygulama Yapılandırması kitaplığı, kendisiyle ilişkilendirilmiş bir Key Vault'a sahip olmayan gizli dizileri yerel olarak çözümlemek için bir yöntem sağlar. Bu çözüm aracılığıyla KeyVaultSecretProvideryapılır. KeyVaultSecretProvider, bir Key Vault başvurusu için sağlanmayan TokenCredential durumlarda çağrılır. Key Vault başvurusunun URI'si sağlanır ve döndürülen değer gizli dizinin değeri olur.

Uyarı

Bir kullanımı KeyVaultSecretProvider , sistem tarafından atanan yönetilen kimliğin otomatik kullanımını geçersiz kılar. Her ikisini de kullanmak için, çözümlenmesi gereken URI'leri kullanmanız KeyVaultCredentialProvider ve döndürmeniz null gerekir.

public class MySecretProvider implements KeyVaultSecretProvider {

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

}

Özellik yönetimi

Özellik yönetimi, Spring Boot uygulamalarının içeriğe dinamik olarak erişmesi için bir yol sağlar. Özellik yönetimi aşağıdakiler gibi çeşitli işlevlere sahiptir:

  • İçeriği etkinleştirebilen veya devre dışı bırakabilen özellik bayrakları
  • İçerik gösterildiğinde hedefleme için özellik filtreleri
  • Özelleştirilmiş özellik filtreleri
  • Uç noktaları dinamik olarak etkinleştirmek için özellik geçitleri

Özellik bayraklarını aşağıdaki yapılandırmayla etkinleştirebilirsiniz:

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

Etkin özellik bayrakları Spring yapılandırma sistemine ön ekiyle feature-managementyüklenir. Özellik bayraklarını yerel yapılandırma dosyasına da kaydedebilirsiniz. Daha fazla bilgi için Özellik bayrağı bildirimi bölümüne bakın.

Özellik yönetimini kullanmanın en kolay yolu ve spring-cloud-azure-feature-management-web kitaplıklarını spring-cloud-azure-feature-management kullanmaktır. İki kitaplık arasındaki fark, özellik geçitleri gibi daha fazla özellik eklemek için ve spring-webmvc kitaplıklarına bağımlı spring-web olmasıdırspring-cloud-azure-feature-management-web.

Anahtar/etiket filtrelerini kullanarak özellik bayraklarını etkinleştirebilirsiniz. Varsayılan olarak, olarak (No Label)görülen bir null etiket atanır. Aşağıdaki örnekte gösterildiği gibi bir etiket filtresi ayarlayarak yüklenen özellik bayraklarını yapılandırabilirsiniz:

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

Özellik yönetimiyle ilgili temel bilgiler

Özellik bayrakları

Özellik bayrakları iki bölümden oluşur: bir ad ve özelliği açmak için kullanılan özellik filtreleri listesi. Özellik bayraklarının boole durumu açık/kapalı olabilir veya özellik filtrelerinin bir listesi olabilir. Özellik bayrakları, özellik filtrelerini döndürene truekadar değerlendirir. Özellik filtresi döndürülmezse true, özellik bayrağı döndürür false.

Özellik filtreleri

Özellik filtreleri, bir özelliğin ne zaman etkinleştirilmesi gerektiğine yönelik bir senaryo tanımlar. Özellik filtreleri zaman uyumlu olarak değerlendirilir.

Özellik yönetimi kitaplığı önceden tanımlanmış dört filtreyle birlikte gelir: AlwaysOnFilter, PercentageFilter, TimeWindowFilter ve TargetingFilter.

Özel özellik filtreleri oluşturabilirsiniz. Örneğin, Microsoft Edge tarayıcısı kullanan müşterilere özel bir deneyim sağlamak için özellik filtresi kullanabilirsiniz. Bu özellik filtresindeki özellikleri özelleştirerek, örneğin Microsoft Edge tarayıcı hedef kitlesine yönelik belirli bir üst bilgiyi gösterebilirsiniz.

Özellik bayrağı bildirimi

Özellik yönetimi kitaplığı, özellik bayrakları için kaynak olarak application.yml veya bootstrap.yml ile birlikte Azure Uygulaması Yapılandırması'nı destekler. bir application.yml dosyasında özellik bayraklarını ayarlamak için kullanılan biçime bir örnek aşağıda verilmiştir:

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

Bu örnekte aşağıdaki özellik bayrakları vardır:

  • feature-t olarak ayarlanır false. Bu ayar her zaman özellik bayrağının değerini döndürür.
  • feature-u özellik filtreleri ile birlikte kullanılır. Bu filtreler özelliği altında enabled-for tanımlanır. Bu durumda, feature-u herhangi Randombir yapılandırma gerektirmeyen adlı bir özellik filtresi vardır, bu nedenle yalnızca name özelliği gereklidir.
  • feature-v adlı TimeWindowFilterbir özellik filtresi belirtir. Bu özellik filtresi, yapılandırma olarak kullanılacak parametreler geçirilebilir. Bu örnekte, bir TimeWindowFilter, özelliğin etkin olduğu başlangıç ve bitiş saatlerini geçirir.
  • feature-wher zaman olarak değerlendirilen trueiçin kullanılırAlwaysOnFilter. bu evaluate alan, özellik filtrelerinin değerlendirilmesini durdurmak için kullanılır ve özellik filtresinin her zaman döndürülmesine neden olur false.

Özellik bayraklarını değerlendirme

Kitaplık spring-cloud-azure-feature-management , özellik bayrağının etkinleştirilip etkinleştirilmediğini belirlemek için sağlar FeatureManager . FeatureManager bayrağının durumunu denetlemek için zaman uyumsuz bir yol sağlar.

spring-cloud-azure-feature-management-web, sağlamanın FeatureManageryanı sıra, tüm isteklerin aynı değeri döndürdüğünü garanti etmek için içinde @RequestScope daha önce değerlendirilen özellik bayraklarının durumunu önbelleğe alan öğesini içerirFeatureManagerSnapshot. Buna ek olarak, web kitaplığı @FeatureGateweb isteklerini farklı uç noktalara yönlendirebilen veya engelleyebilen sağlar.

Özellik bayrağı denetimi

FeatureManager, tür nesnelerine @Component ekleyebileceğiniz veya ekleyebileceğiniz @Autowired bir @Bean dosyadır. FeatureManager bir özellik bayrağının adı geçirildiğinde durumunu döndüren bir yönteme isEnabled sahiptir.

@Autowired
FeatureManager featureManager;

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

Not

FeatureMangerayrıca adlı isEnabledAsynczaman uyumsuz bir sürümüne isEnabled sahiptir.

Özellik yönetimini yapılandırmadıysanız veya özellik bayrağı yoksa, isEnabled her zaman döndürür false. Mevcut bir özellik bayrağı bilinmeyen bir özellik filtresiyle yapılandırıldıysa, bir FilterNotFoundException oluşturulur. olarak yapılandırarak fail-fast bu davranışı döndürecek false şekilde falsedeğiştirebilirsiniz. Aşağıdaki tabloda açıklanmaktadır fail-fast:

Veri Akışı Adı Açıklama Zorunlu Varsayılan
spring.cloud.azure.feature.management.fail-fast Bir özel durum oluşursa, bir RuntimeException oluşturulur. Bu özellik olarak falseayarlanırsa, bunun isEnabled yerine döndürür false . Hayır true

ile FeatureManager arasındaki FeatureManagerSnapshot tek fark, içindeki sonuçları önbelleğe alma işlemidir@RequestScope.

Özellik kapısı

Özellik yönetimi web kitaplığıyla, bir uç noktayı yürütmek için belirli bir özelliğin etkinleştirilmesini zorunlu kılabilirsiniz. Aşağıdaki örnekte gösterildiği gibi ek açıklamayı @FeatureGate kullanarak bu gereksinimi ayarlayabilirsiniz:

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

Uç noktaya yalnızca "feature-t" etkinse erişebilirsiniz featureT .

Devre dışı bırakılmış eylem işleme

Bir uç nokta, belirttiği özellik devre dışı bırakıldığından engellendiğinde çağrılır DisabledFeaturesHandler . Varsayılan olarak, bir HTTP 404 döndürülür. Aşağıdaki örnekte gösterildiği gibi uygulayarak DisabledFeaturesHandlerbu davranışı geçersiz kılabilirsiniz:

@Component
public class MyDisabledFeaturesHandler implements DisabledFeaturesHandler {

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

}
Yönlendirme

Bazı yollar, özellikler tarafından geçitli uygulama özelliklerini kullanıma sunabilir. Bir özellik devre dışı bırakılırsa, aşağıdaki örnekte gösterildiği gibi bu yolları başka bir uç noktaya yönlendirebilirsiniz:

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

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

Yerleşik özellik filtreleri

Paketle birlikte spring-cloud-azure-feature-management gelen birkaç özellik filtresi vardır. Bu özellik filtreleri otomatik olarak eklenmez, ancak bunları içinde @Configurationayarlayabilirsiniz.

AlwaysOnFilter

Bu filtre her zaman döndürür true. Kullanım örneği için özellik bayrağı bildirimi bölümüne bakın.

PercentageFilter

Bir kullanıcı her istekte bulunun, değerlendirmesi PercentageFilter farklı bir sonuç döndürebilir. Kullanıcı başına özellik bayrağının sonucunu önbelleğe alan komutunu kullanarak FeatureManagementSnapshotbu tutarsızlığı aşabilirsiniz. Bu özellik, kullanıcının isteği yeniden göndermesi gerekse bile tutarlı bir deneyime sahip olmasını sağlar.

feature-management:
  feature-v:
    enabled-for:
    - name: PercentageFilter
      parameters:
        Value: 50

TimeWindowFilter

Bu filtre, bir özelliği bir zaman penceresine göre etkinleştirme özelliği sağlar. Yalnızca Endbelirtirseniz, özellik o zamana kadar açık olarak kabul edilir. Yalnızca Startbelirtirseniz, özellik bu süreden sonraki tüm noktalarda açık olarak kabul edilir. Her ikisini de belirtirseniz, özellik iki kez arasında geçerli kabul edilir.

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

Bu filtre, bir özelliği hedef kitle için etkinleştirme özelliği sağlar. Hedeflemenin ayrıntılı açıklaması için hedefleme bölümü bölümüne bakın. Filtre parametreleri, kullanıcıları, grupları açıklayan bir hedef kitle nesnesini ve özelliğe erişimi olması gereken kullanıcı tabanının varsayılan yüzdesini içerir. Hedef kitlede listelenen her grup nesnesi için, söz konusu grubun özelliğe erişimi olan üyelerinin yüzdesini tanımlayan bir yüzde gerekir. Bir kullanıcı aşağıdaki durumlarda özelliği etkinleştirmiştir:

  • Kullanıcı doğrudan kullanıcıların bölümünde belirtilir.
  • Kullanıcı, grup dağıtımlarının dahil edilen yüzdesinde yer alır.
  • Kullanıcı varsayılan dağıtım yüzdesine girer.
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

Özel özellik filtreleri

Özel özellik filtresi oluşturmak, tanımladığınız ölçütlere göre özellikleri etkinleştirmenin bir yolunu sağlar. Özel özellik filtresi oluşturmak için arabirimini FeatureFilter uygulamanız gerekir. FeatureFilter tek bir yönteme evaluatesahiptir. Bir özellik, özellik filtresiyle etkinleştirilebileceğini belirttiğinde evaluate yöntemi çağrılır. döndürürse evaluate true, özelliğin etkinleştirilmesi gerektiği anlamına gelir. döndürürse, biri döndürene falsetruekadar özellik filtrelerini değerlendirmeye devam eder. Tüm filtreler döndürürse false, özellik kapalıdır.

Özellik filtreleri Spring Beans olarak tanımlanır, bu nedenle olarak @Component tanımlanır veya içinde @Configurationtanımlanır.

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

}

Parametreli özellik filtreleri

Bazı özellik filtreleri, bir özelliğin açık olup olmayacağını belirlemek için parametreler gerektirir. Örneğin, bir tarayıcı özellik filtresi belirli bir tarayıcı kümesi için bir özelliği açabilir. Microsoft Edge ve Chrome tarayıcıları için bir özelliğin etkinleştirilmesini isteyebilirsiniz ancak Firefox'u etkinleştirmemek isteyebilirsiniz. Bu durumu ayarlamak için, parametreleri bekleyebileceğiniz bir özellik filtresi tasarlayabilirsiniz. Bu parametreler özellik yapılandırmasında ve kodda belirtilebilir ve parametresi evaluatearacılığıyla FeatureFilterEvaluationContext erişilebilir olacaktır. FeatureFilterEvaluationContextparametersHashMap<String, Object>özelliğine sahiptir.

Hedefleme

Hedefleme, geliştiricilerin yeni özellikleri kullanıcı tabanına aşamalı olarak dağıtmasını sağlayan bir özellik yönetimi stratejisidir. Strateji, hedef kitle olarak bilinen bir kullanıcı kümesini hedefleme kavramını temel alır. Hedef kitle belirli kullanıcılardan, gruplardan ve tüm kullanıcı tabanının belirlenmiş yüzdelerinden oluşur. Hedef kitleye dahil edilen gruplar, toplam üyelerinin yüzdelerine ayrılabilir.

Aşağıdaki adımlarda yeni bir 'Beta' özelliği için aşamalı dağıtım örneği gösterilmektedir:

  1. Bireysel kullanıcılar Jeff ve Alicia'ya Beta erişimi verilir.
  2. Başka bir kullanıcı, Mark, kabul etmek ister ve dahil edilir.
  3. "Ring1" olarak bilinen bir grubun yüzde yirmisi Beta'ya dahil edilir.
  4. Betaya dahil edilen "Ring1" kullanıcılarının sayısı yüzde 100'e kadar artırılır.
  5. Kullanıcı tabanının yüzde beşi betaya dahil edilir.
  6. Dağıtım yüzdesi yüzde 100'e kadar artırılır ve özellik tamamen kullanıma sunulmaktadır.

Bir özelliği dağıtmaya yönelik bu strateji, dahil edilen özellik filtresi aracılığıyla kitaplıkta yerleşik olarak bulunur TargetingFilter .

Uygulamada hedefleme

Örnek projede hedefleme özelliği filtresini kullanan örnek bir web uygulaması kullanılabilir.

bir uygulamada kullanmaya TargetingFilter başlamak için, bunu diğer herhangi bir @Bean özellik filtresi gibi eklemeniz gerekir. TargetingFilteruygulamasına TargetingContextAccessoreklenecek başka bir @Bean uygulamaya dayanır. , TargetingContextAccessor aşağıdaki örnekte gösterildiği gibi geçerli kullanıcı kimliğini ve gruplarını tanımlamak için kullanılacak geçerlinin tanımlanmasına TargetingContext olanak tanır:

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

}

Değerlendirme seçeneklerini hedefleme

Belirli TargetingFilterbir üzerinde hedefleme değerlendirmesinin nasıl gerçekleştirildiğini özelleştirmek için seçenekler kullanılabilir. Oluşturma sırasında TargetingFilter isteğe bağlı bir parametresi TargetingEvaluationOptionsayarlayabilirsiniz.

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

Yapılandırma yenilemesi

Yapılandırmalarınız için yapılandırma yenilemeyi etkinleştirmek, uygulamayı yeniden başlatmak zorunda kalmadan Uygulama Yapılandırması deponuzdan veya depolarınızdan en son değerlerini çekmenizi sağlar.

Yenilemeyi etkinleştirmek için izleme tetikleyicileriyle birlikte izlemeyi etkinleştirmeniz gerekir. İzleme tetikleyicisi, güncelleştirmeleri tetikleme amacıyla değer değişiklikleri denetlenen isteğe bağlı etiketi olan bir anahtardır. İzleme tetikleyicisinin değeri, yenileme gerektiğinde değiştiği sürece herhangi bir değer olabilir.

Not

İzleme tetikleyicisinin ETag'ini değiştiren herhangi bir işlem, içerik türü değişikliği gibi bir yenilemeye neden olur.

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

Yapılandırma yenilemesini tetiklemek için yapılandırma deponuzdaki bir anahtarın değerini değiştirin. Ardından saat tuşlarından birini yeni bir değere güncelleştirin. Bu değişiklik bir günlük oluşturulmasını tetikler. Örneğin, değerinin /application/config.message değiştirilmesi aşağıdaki günlük iletisini tetikler:

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

Uygulama günlüğü oluşturduktan sonra yenileme kapsamındaki tüm @Beanbilgileri yeniler.

Not

Varsayılan olarak, @ConfigurationProperties açıklamalı fasulyeler bu kapsama eklenir.

Çekme tabanlı yenileme

Uygulama Yapılandırması Spring kitaplıkları, izleme tetikleyicilerinde yapılan değişiklikler için düzenli aralıklarla yenileme aralığını denetleme özelliğini destekler. Varsayılan olarak yenileme aralığı 30 saniye olarak ayarlanır. Yenileme aralığı geçtikten sonra, tüm tetikleyiciler değişiklikler için verilen depoda denetlenir. Anahtarda yapılan herhangi bir değişiklik, yenilemenin tetiklenmesine neden olur. Kitaplıklar Spring yenileme sistemiyle tümleştirildiği için, tüm yenilemeler tüm depolardan tüm yapılandırmaları yeniden yükler. Yenileme aralığını 1 saniyeden uzun herhangi bir zaman aralığına ayarlayabilirsiniz. Yenileme aralığı siçin desteklenen birimler sırasıyla , m, hve d saniyeler, dakikalar, saatler ve günler içindir. Aşağıdaki örnek yenileme aralığını 5 dakikaya ayarlar:

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

Otomatik

Kitaplığı kullandığınızda spring-cloud-azure-appconfiguration-config-web , özellikle de bir servlet isteği gerçekleştiğinde ServletRequestHandledEventuygulama otomatik olarak yenilemeyi denetler. Bu olayın gönderilmesinin en yaygın yolu, içindeki @RestControlleruç noktalara yönelik isteklerdir.

El ile

Konsol uygulamaları gibi yalnızca spring-cloud-azure-appconfiguration-configkullanan uygulamalarda, yöntemini refreshConfiguration çağırarak AppConfigurationRefreshyenilemeyi el ile tetikleyebilirsiniz. AppConfigurationRefresh, herhangi @Componentbir öğesine ekleyebileceğiniz bir @Bean işlemdir.

Ayrıca, kitaplık Spring'in yapılandırma sistemini kullandığından, yenilemeyi tetiklemek yalnızca Azure Uygulaması Yapılandırma deponuzdaki yapılandırmaların yeniden yüklenmesine değil tüm yapılandırmalarınızın yenilenmesine neden olur.

Anında iletme tabanlı yenileme

Yapılandırma değerlerinizi yenilemek spring-cloud-azure-appconfiguration-config-web için kitaplığı Azure Uygulaması Yapılandırma deponuzdan anında iletme bildirimleri alacak şekilde ayarlayabilirsiniz. Bu yapılandırmayı, belirtilen anahtarlara değişiklik bildirimleri göndermek üzere yapılandırabileceğiniz bir Azure Event Grid Web Kancası aracılığıyla ayarlayabilirsiniz. Spring Actuator kitaplığını bağımlılık olarak ekleyerek Uygulama Yapılandırması yenileme uç noktalarını kullanıma açabilirsiniz. İki farklı uç nokta vardır: appconfiguration-refresh ve appconfiguration-refresh-bus. Bu uç noktalar, uygulama yapılandırma uç noktalarının alma sırasında yenilemeyi zorlamak yerine yenileme aralığını sona erdirdiği karşılıkları refresh ve refresh-busile benzer şekilde çalışır. ve refresh-bus'yi refresh kullanmaya devam edebilirsiniz, ancak kurulumda bir yanıta ihtiyaç duyduklarından, bunları bir Web Kancası ile doğrudan Azure Event Grid'e bağlayamazsınız.

Özelliğin appconfiguration-refresh yenileme aralığının süresi dolduğundan, bir sonraki yenileme denetiminden önce kalan yenileme aralığı beklemez. özelliği, appconfiguration-refresh-bus bir uygulamanın tüm örneklerini yenilemeleri için bilgilendirmek için Azure Service Bus gibi bağlı bir mesajlaşma hizmetine bir bildirim gönderir. Her iki durumda da yenileme aralığında süresi tamamen dolmaz, ancak küçük bir değişim miktarıyla kapalıdır. Bu değişim, uygulamanızın her örneğinin aynı anda yenilemeyi denememesini sağlar.

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

Yenileme uç noktalarının kullanıma alınmasına ek olarak, güvenlik için gerekli bir sorgu parametresi eklenmiştir. Varsayılan olarak hiçbir belirteç adı veya değeri ayarlanmadı, ancak aşağıdaki örnekte gösterildiği gibi uç noktaları kullanmak için bir ayar yapılması gerekir:

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]

Web kancalarını ayarlama

Web kancası ayarlamak için Azure Uygulaması Yapılandırma deponuzu açın ve gezinti menüsünden Olaylar'ı açın. Ardından Olay Aboneliği'ne tıklayın. Olayınızın adını ayarlayın ve uç nokta türünü Web Kancası olarak seçin. Web Kancası'nın seçilmesi bir Uç Nokta seçeneğinin görünmesine neden olur. Bir uç nokta seçin'i belirleyin. Uç noktanız aşağıdaki örnekteki gibi görünmelidir: https://www.myaplication.com/actuator/appconfiguration-refresh?myTokenName=mySecret.

Seçimi Onayla verilen URI'ye bir kurulum bildirimi gönderir ve bir yanıt bekler. Yanıt döndürülmezse kurulum başarısız olur. azure-spring-cloud-appconfiguration-web Uygulama için Azure Uygulaması Yapılandırma deposu yapılandırılmışsa, uç noktalar için kitaplık kurulumu doğru yanıtı döndürür. Bu onay başka şekillerde gönderilebilir. Web kancası teslimi hakkında daha fazla bilgi için bkz . Web kancası olay teslimi.

Not

Bu doğrulama yalnızca uç noktanın oluşturulması veya değiştirilmesi üzerine gerçekleşir.

Aksi takdirde her anahtar oluşturma ve değiştirme işleminden sonra yenileme tetiklendiğinden, filtreleri ayarlamanızı kesinlikle öneririz.

Zorlamalı istemci yenilemesi

Kitaplığı, yenileme aralığındaki tüm yapılandırmaların yenilenmesini zorlayacak şekilde yapılandırabilirsiniz. Aşağıdaki tabloda özelliği açıklanmaktadır refresh-interval :

Veri Akışı Adı Açıklama Zorunlu Varsayılan
spring.cloud.azure.appconfiguration.refresh-interval Yenilemeler arasındaki standart süre. bir Duration' dir. Hayır boş

ile spring.cloud.azure.appconfiguration.refresh-interval yenileme, yapılandırılmış hiçbir saat anahtarını denetlemez. Bu özellik, Key Vault gizli dizilerinin güncel tutulduğundan emin olmak için kullanılır çünkü Azure Uygulaması Yapılandırması ne zaman güncelleştirildiklerini anlayamaz.

Azure Key Vault bir sertifikanın ortak ve özel anahtar çiftini gizli dizi olarak depoladığı için uygulamanız Uygulama Yapılandırması'de herhangi bir sertifikayı Key Vault başvurusu olarak alabilir. Sertifikaların düzenli aralıklarla döndürülmüş olması gerektiğinden, istemci uygulamalarının da aynı sıklıkta güncelleştirilerek istemci yenileme aralığı kullanılarak yapılması gerekir.

Özellik bayrağı yenileme

Özellik bayraklarının ve izlemenin her ikisi de etkinse, özellik bayrakları için yenileme aralığı varsayılan olarak 30 saniye olarak ayarlanır. Yenileme aralığı geçtikten sonra, tüm özellik bayrakları değişiklikler için verilen depoda denetlenir. Anahtarda yapılan herhangi bir değişiklik, yenilemenin tetiklenmesine neden olur. Kitaplıklar Spring yenileme sistemiyle tümleştirildiği için, tüm yenilemeler tüm depolardan tüm yapılandırmaları yeniden yükler. Yenileme aralığını 1 saniyeden uzun herhangi bir zaman aralığına ayarlayabilirsiniz. Yenileme aralığı siçin desteklenen birimler sırasıyla , m, hve d saniyeler, dakikalar, saatler ve günler içindir. Aşağıdaki örnek yenileme aralığını 5 dakikaya ayarlar:

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

Sistem durumu göstergesi

İstemci kitaplığı, Azure Uygulaması Yapılandırma deposuna veya depolarına bağlantının iyi durumda olup olmadığını denetleen bir sistem durumu göstergesiyle birlikte gelir. Her depo için etkinleştirilirse aşağıdaki durum değerlerinden birini verir:

  • UP - Son bağlantı başarılı oldu.
  • AŞAĞI- Son bağlantı 200 olmayan bir hata koduyla sonuçlandı. Bu durum, süresi dolan kimlik bilgileri ile hizmet sorunu arasında değişen sorunlardan kaynaklanıyor olabilir. İstemci kitaplığı, bir sonraki yenileme aralığında depoya bağlanmak için otomatik olarak yeniden denenir.
  • YÜKLENMEDİ - Yapılandırma deposu yerel yapılandırma dosyasında listelenir, ancak yapılandırma deposu başlangıçta dosyadan yüklenmedi. Yapılandırma deposu yapılandırma dosyasında devre dışı bırakıldı veya depo yapılandırması olarak ayarlanırken fail-fast falseyapılandırma veya yapılandırmalar başlangıçta yüklenemedi.

sistem durumu göstergesini ayarıyla management.health.azure-app-configuration.enabled=trueetkinleştirebilirsiniz.

İstemci özelleştirmesi

Uygulama Yapılandırması kitaplığı, Azure Uygulaması Yapılandırmasına ve Azure Key Vault'a bağlanmak için Java için Azure SDK'sını kullanır. İstemcileri ConfigurationClientCustomizer SecretClientCustomizerdeğiştirmek için ve olmak üzere iki arabirim sağlanır. Her arabirim, aşağıdaki arabirim tanımlarında gösterildiği gibi istemcinin String yapılandırıldığı URI değeriyle birlikte ilgili oluşturucusunu alan bir customize yönteme sahiptir:

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

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

Bu arabirimler, HTTP istemcisinin ve yapılandırmalarının özelleştirilmesini sağlar. Aşağıdaki örnek, varsayılan HttpClient değeri Uygulama Yapılandırması ve Key Vault'a yönlendirilen tüm trafik için ara sunucu kullanan başka bir örnekle değiştirir.

Not

ConfigurationClientBuilder ve SecretClientBuilder zaten içine geçirildiğinde kullanılacak şekilde ayarlanmıştırcustomize. Kimlik bilgileri ve yeniden deneme ilkesi de dahil olmak üzere istemcilerde yapılan tüm değişiklikler, zaten mevcut olanları geçersiz kılar.

Bu yapılandırmayı Spring Cloud Azure yapılandırmasını kullanarak da yapabilirsiniz.

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

}