Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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. Kütüphane, ortam değişkenleri, komut satırı yapılandırmaları, yerel yapılandırma dosyaları ve benzeri Spring ortamı tarafından önceden oluşturulmuş soyutlamalarla eşleşecek soyutlamalar PropertySource 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
- Azure aboneliği - ücretsiz bir abonelik oluşturun.
- Java Development Kit (JDK) sürüm 8 veya üzeri.
- Apache Maven
- Azure CLI
Uygulama Yapılandırma mağazanızı ayarlayın
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>6.0.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>
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 örnekte , application.properties dosyası aşağıdaki satırı içerir:
spring.config.import=azureAppConfiguration
spring.cloud.azure.appconfiguration.stores[0].endpoint=${CONFIG_STORE_ENDPOINT}
CONFIG_STORE_ENDPOINT , Azure App Configuration Store'unuzun uç nokta URL'sine sahip bir ortam değişkenidir.
Not
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.
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.
/application/https://<name-of-your-store>.azconfig.io/ adında bir özellik kaynağı, o deponun özelliklerini içerecek şekilde 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. Anahtarın birden çok depoda çoğaltıldığı durumlarda, sonuncu kazanır.
spring.cloud.azure.appconfiguration.stores[0].endpoint=[first-store-endpoint]
spring.cloud.azure.appconfiguration.stores[1].endpoint=[second-store-endpoint]
Bu örnekte, her iki depo da aynı yapılandırma anahtarına sahipse, ikinci depodaki yapılandırma en yüksek önceliğe sahiptir.
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
Kitaplık, yapılandırmaları anahtar ve etiketlerini kullanarak yükler. Varsayılan olarak, anahtarla /application/ başlayan yapılandırmalar yüklenir. Varsayılan etiket \0, Azure portalında (No Label) olarak görünür. Spring profili ayarlanırsa ve hiçbir etiket sağlanmazsa, varsayılan etiket Spring Profilinizdir ve bu da şeklindedir ${spring.profiles.active}.
Farklı anahtar ve etiket filtreleri seçerek hangi yapılandırmaların yüklendiğini 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 anahtarı eşleştirir. |
abc |
Adı abc olan bir anahtarla eşleşir. |
abc* |
abc ile başlayan anahtar adlarıyla eş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 |
null etiketleriyle eşleşir, Azure portalında (No Label) olarak görünür. |
1.0.0 |
Etiket 1.0.0 ile tam olarak eşleşir. |
1.0.* |
1.0.* ile başlayan etiketlerle eşleşir. |
,1.0.0 |
Etiketleri null ve 1.0.0 ile eşleştirir. Virgülle ayrılmış beş değerle sınırlıdır. |
YAML'i etiket filtreleriyle kullanıyorsanız ve etiketsiz yapılandırmalar ve diğer etiketlerle daha fazla yapılandırma yüklemek istiyorsanız, boş bir , eklemeniz gerekir. Örneğin, ,dev, \0 ile ve dev ile eşleşir. Bu durumda etiket filtresini tek tırnak içine alın. Bu değer, önce etiket olmadan yapılandırmayı ve ardından belirli etiketlere sahip yapılandırmaları aynı filtrede yüklemenize olanak tanır:
spring:
cloud:
azure:
appconfiguration:
stores:
- selects:
- label-filter: ',1.0.0'
Not
* ile , filtrelerde birleştiremezsiniz. Bu durumda ek bir seçme değeri kullanmanız gerekir.
* etiket filtresinde kullanıldığında ve aynı anahtara sahip birden çok yapılandırma yüklendiğinde, bunlar alfabetik sıraya göre yüklenir ve alfabetik olarak son sıradaki etiket kullanılır.
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, label-filter içindeki Spring Profillerini, ${spring.profiles.active} kullanarak 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, kitaplık ilk olarak etikete sahip tüm yapılandırmaları ve ardından Spring Profilleriyle \0 eşleşen tüm yapılandırmaları yükler. Spring Profilleri, sonunda yer aldıkları için \0 yapılandırmalarına göre önceliklidir.
İkinci label-filter'de, _local dizesi Spring Profilleri'nin sonuna eklenir, fakat yalnızca birden fazla Spring Profili varsa son Spring Profiline eklenir.
Devre dışı bırakılmış mağazalar
yapılandırmasını spring.cloud.azure.appconfiguration.enabledkullanarak tüm yapılandırma depoları için yüklemeyi devre dışı bırakabilirsiniz.
spring.cloud.azure.appconfiguration.stores[0].enabled yapılandırması ile tek bir depoyu devre dışı bırakabilirsiniz.
Not
Sistem durumu ölçümlerini kullanıyorsanız mağazalarınızın yine de değeriyle NOT LOADEDlistelendiğini görürsünüz. Yüklenen özellik kaynaklarını denetlediğinizde, bunların listelendiğini görürsünüz, ancak bunlar değer içermez. Bu davranış, ayarlanan özelliğinden spring.config.import kaynaklanır. Eğer azureAppConfiguration, spring.config.import için ayarlı değilse, hiçbir değer gösterilmez.
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.
Not
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.
Bağlantı dizesi (önerilmez)
Bağlantı dizesi aracılığıyla kimlik doğrulaması, kurulumu en basit biçimdir, ancak önerilmez. 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 spring.cloud.azure.appconfiguration.stores[0].connection-string özelliğini bağlantı dizesi olarak ayarlayabilirsiniz. Bu yaklaşımı kullanırken, yerel yapılandırma dosyasındaki bağlantı dizesini bir ortam değişkenine eşleyen bir 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.
Yapılandırmaları okumak için kullanılan kimliği 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. Eğer karıştırmanız ve eşleştirmeniz gerekiyorsa, farklı yöntemler kullanmak için ConfigurationClientCustomizer öğesini ConfigurationClientBuilder ile değiştirebilirsiniz.
Not
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.
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 bitiş 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 yapılandırma uygulamanızın çok bölgeli dağıtılmış bir hizmet olarak büyümesine yardımcı olurken ölçeklenebilirliğine de destek olur.
Varsayılan olarak, kitaplık bir yapılandırma deposu için var olan tüm çoğaltmaları otomatik olarak bulur. Verilen depoya istek gönderildiğinde ve istek başarısız olduğunda, kütüphane isteği mevcut çoğaltmalar üzerinde otomatik olarak yeniden dener.
Kitaplık aşağıdaki koşullardan herhangi birini gözlemlerse yük devretme gerçekleşebilir:
- "Servis 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).
Sağlanan mağaza yeniden çevrimiçi olduktan sonra, kütüphane isteği sağlanan mağazaya karşı otomatik olarak yeniden dener.
Yük devretme davranışını denetlemek istiyorsanız, yük devretme için kullanılacak depoların listesini el ile sağlayabilirsiniz.
spring.cloud.azure.appconfiguration.stores[0].endpoints[0]=[your primary store endpoint]
spring.cloud.azure.appconfiguration.stores[0].endpoints[1]=[your replica store endpoint]
veya
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]
Birincil depoya ait sağlanan çoğaltma uç noktaları başarısız olursa, kütüphane, otomatik olarak keşfedilen ana depoya ait çoğaltmalara bağlanmayı dener.
ayarıyla spring.cloud.azure.appconfiguration.stores[0].replica-discovery-enabled=falseçoğaltmayı devre dışı bırakabilirsiniz.
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]
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 tutucu
Kütüphane, ${} tarzı ortam yer tutucularıyla yapılandırmaları destekler. Yer tutucu kullanan bir Azure Uygulama Yapılandırması anahtarına başvururken, başvurudan ön ekleri kaldırın. Örneğin, /application/config.message, ${config.message} olarak adlandırılır.
Not
Kaldırılan ön ek, spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter değeriyle eşleşir. Kırpılan ön ek, spring.cloud.azure.appconfiguration.stores[0].trim-key-prefix[0] için bir değer ayarlayarak değiştirilebilir.
JSON veri formatı
İç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şleşir:
@ConfigurationProperties(prefix = "config")
public class MyConfigurations {
private Map<String, Color> colors;
}
Key Vault referansları
Azure Uygulama Yapılandırması ve kitaplıkları, Key Vault'ta depolanan gizli bilgilere 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üvende kalır, ancak bunlara uygulamayı yüklerken diğer yapılandırmalarla aynı şekilde erişebilirsiniz.
Uygulamanız, diğer anahtarlar için olduğu gibi Key Vault başvurularını almak için istemci sağlayıcısını kullanır, tıpkı App Configuration'da depolanan diğer anahtarlar gibi. Müşteri, anahtarları Key Vault referansları olarak tanıdığından, bunlar özel bir içerik türüne sahiptir ve müşteri, sizin için değerlerini almak üzere Key Vault'a bağlanır.
Not
Key Vault, sırların yalnızca tek tek alınmasına izin verdiğinden, Uygulama Yapılandırması'nda depolanan her Key Vault referansı, Key Vault'a bir istek yapılmasına yol açar.
Key Vault referansları oluşturma
Azure portalında, Yapılandırma gezgini>Oluştur>Anahtar Kasası referansı bulun ve oluşturun. Ardından, erişiminiz olan anahtar kasalarından herhangi birinden referans göstermek için bir gizli anahtar seçebilirsiniz. Giriş sekmesinden isteğe bağlı 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 referanslarını kullanma
Kitaplığı yapılandırmak için Spring Cloud Azure yapılandırmasını kullanabilirsiniz. Azure Key Vault'a bağlanmak için App Configuration'a bağlanırken kullanılan aynı kimlik bilgilerini kullanabilirsiniz.
Kendi kimlik doğrulama yönteminizi sağlamak için bir SecretClientCustomizer'ı, bir ConfigurationClientCustomizer oluşturduğunuz gibi oluşturabilirsiniz.
Key Vault dışındaki gizlileri çözümleme
Uygulama Yapılandırma kitaplığı, anahtar kasası başvurularının çözümlemesini geçersiz kılmak için bir yöntem sağlar. Örneğin, geliştirme ortamında gizli bilgileri yerel olarak çözümlemek için kullanabilirsiniz. Çözüm KeyVaultSecretProvider aracılığıyla yapılır. Eğer KeyVaultSecretProvider sağlanırsa, her anahtar kasası referansında çağrılır.
getSecret null olmayan bir değer döndürürse, gizli değer olarak kullanılır. Aksi takdirde Key Vault Başvurusu normal şekilde çözümlenir.
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 spring-cloud-azure-feature-management ve spring-cloud-azure-feature-management-web kitaplıklarını kullanmaktır. İki kütüphane arasındaki fark, spring-cloud-azure-feature-management-web'nin daha fazla özellik eklemek için spring-web ve spring-webmvc kütüphanelerine bağımlı olmasıdır, örneğin özellik geçitleri.
Varsayılan olarak, \0 etiketiyle (No Label) olarak görülen tüm özellik bayrakları yüklenir. 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ı, bir ad ve özelliği açmak için kullanılan özellik filtreleri listesi de dahil olmak üzere birden çok bölümden oluşur. Özellik bayraklarının boole durumu açık veya kapalı olabilir veya özellik filtrelerinin bir listesi olabilir. Özellik bayrakları, bir özellik filtresi true döndürünceye kadar özellik filtrelerini 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 anahtarı bildirimi
Özellik yönetimi kitaplığı, özellik bayrakları için kaynak olarak application.yml veya application.properties ile birlikte Azure Uygulama 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_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
Bu örnekte aşağıdaki özellik bayrakları vardır:
-
feature-tolarak ayarlanırfalse. 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ındaenabled-fortanımlanır. Bu durumda,feature-u,Randomadlı, herhangi bir yapılandırma gerektirmeyen bir özellik filtresine sahiptir, bu nedenle yalnızca ad özelliği gereklidir. -
feature-vadlıTimeWindowFilterbir özellik filtresi belirtir. Bu özellik filtresine, yapılandırma olarak kullanılabilecek parametreler geçirilebilir. Bu örnekte,TimeWindowFilter, özelliğin etkin olduğu saatlerin başlangıç ve bitiş zamanlarını geçer. -
feature-w, her zamanAlwaysOnFilterolarak değerlendirilentrueiçin kullanılır. buevaluatealan, özellik filtrelerinin değerlendirilmesini durdurmak için kullanılır ve özellik filtresinin her zaman döndürülmesine neden olurfalse.
Özellik bayraklarını değerlendirme
spring-cloud-azure-feature-management kütüphanesi, bir özellik bayrağının etkin olup olmadığını belirlemek için FeatureManager sağlar.
FeatureManager bayrağının durumunu denetlemek için zaman uyumsuz bir yol sağlar.
spring-cloud-azure-feature-management-web, FeatureManager sağlamanın yanı sıra, FeatureManagerSnapshot içinde önceden değerlendirilen özellik bayraklarının durumunu önbelleğe alan @RequestScope öğesini içerir ve bu, tüm isteklerin aynı değeri döndürmesini garanti eder. Buna ek olarak, web kitaplığı, web isteklerini farklı uç noktalara yönlendirebilen veya engelleyebilen @FeatureGate'ı sağlar.
Özellik bayrağı denetimi
FeatureManager, @Bean olabilen veya @Autowired türü nesnelere enjekte edilebilen bir @Component'dir.
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
FeatureManager ayrıca isEnabled adlı zaman uyumsuz bir isEnabledAsync sürümüne sahiptir.
Özellik yönetimi yapılandırılmamışsa veya özellik bayrağı yoksa, isEnabled her zaman false döndürür. Mevcut bir özellik bayrağı bilinmeyen bir özellik filtresiyle yapılandırıldıysa, bir FilterNotFoundException fırlatılır. Ayarları false olarak yapılandırarak davranışı fail-fast şeklinde dönecek şekilde false değiştirebilirsiniz. Aşağıdaki tabloda açıklanmaktadır fail-fast:
| İsim | Açıklama | Zorunlu | Varsayılan |
|---|---|---|---|
spring.cloud.azure.feature.management.fail-fast |
Bir özel durum oluşursa, bir RuntimeException atılır. Bu özellik false olarak ayarlanırsa, isEnabled yerine false döndürür. |
Hayır | true |
FeatureManagerSnapshot ile FeatureManager arasındaki tek fark, @RequestScope içindeki sonuçların önbelleğe alınmasıdır.
Özellik geçidi
Ö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() {
...
}
"«feature-t» etkinse yalnızca featureT uç noktasına erişebilirsiniz."
Devre dışı bırakılmış eylem yönetimi
Bir uç nokta, belirttiği özellik devre dışı bırakıldığından engellendiğinde, DisabledFeaturesHandler çağrılır. 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, belirli özellikler tarafından erişime izin verilen uygulama yeteneklerini ortaya çıkarabilir. 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
spring-cloud-azure-feature-management paketiyle gelen birkaç özellik filtresi vardır. Bu özellik filtreleri otomatik olarak eklenir.
AlwaysOnFilter (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.
Yüzde Filtresi
Her denetlenişinde PercentageFilter değerlendirmesi farklı bir sonuç döndürebilir. Özellik bayrağının sonucunu istek başına önbelleğe alan komutunu kullanarak FeatureManagementSnapshotbu tutarsızlığı aşabilirsiniz.
feature-management:
feature_flags:
- name: feature-v
conditions:
client_filters:
- name: PercentageFilter
parameters:
Value: 50
Zaman Penceresi Filtresi
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_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"
Bu filtre yinelenen zaman penceresi filtrelerini de destekler. Son kullanma süresiyle birlikte hem günlük hem de haftalık yinelenmeleri destekler.
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
Bu yinelenme düzeni her hafta Pazartesi ve Çarşamba günleri 00:00:00 GMT ile 12:00:00 GMT arasında gerçekleşir ve süresi dolmaz.
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"
Bu yinelenme düzeni, bitiş tarihine kadar her gün 00:00:00 GMT ile 12:00:00 GMT saatleri arasındadır.
Hedefleme Filtresi
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ı, herhangi bir grup dağıtımının dahil olduğu yüzdeye dahildir.
- Kullanıcı varsayılan dağıtım yüzdesine girer.
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
Ö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. Eğer evaluatetrue döndürürse, bu, özelliğin etkinleştirilmesi gerektiği anlamına gelir. Eğer false döndürürse, biri true döndürene kadar özellik filtrelerini değerlendirmeye devam eder. Tüm filtreler false geri döndürürse, özellik kapalı olur.
Özellik filtreleri Spring Beans olarak tanımlandığı için ya @Component olarak tanımlanır ya da @Configuration içinde tanı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 belirtilecek ve FeatureFilterEvaluationContext'nin evaluate parametresi aracılığıyla erişilebilir olacaktır.
FeatureFilterEvaluationContext, bir parameters olan Map<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:
- Bireysel kullanıcılar Jeff ve Alicia'ya Beta erişimi verilir.
- Başka bir kullanıcı olan Mark, katılmak ister ve dahil edilir.
- "Ring1" olarak bilinen bir grubun yüzde yirmisi Beta'ya dahil edilir.
- Betaya dahil edilen "Ring1" kullanıcılarının sayısı yüzde 100'e kadar artırılır.
- Kullanıcı tabanının yüzde beşi betaya dahil edilir.
- 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, TargetingFilter dahil edilen özellik filtresi aracılığıyla kitaplıkta yerleşik olarak bulunmuştur.
Uygulamada hedefleme
Örnek projede hedefleme özelliği filtresini kullanan örnek bir web uygulaması kullanılabilir.
Bir uygulamada TargetingFilter kullanmaya başlamak için, bunu diğer herhangi bir özellik filtresi gibi @Bean olarak eklemeniz gerekir.
TargetingFilter, @Bean uygulamasına TargetingContextAccessor eklenmesine dayanır. Geçerli kullanıcı kimliği ve gruplarını belirlemek için TargetingContextAccessor ve TargetingContext tanımlamalarının nasıl kullanılacağını, aşağıdaki örnek göstermektedir:
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);
}
}
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 TargetingEvaluationOptions isteğe bağlı bir parametresi TargetingFilterayarlayabilirsiniz.
@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, sistemin güncelleştirmeleri tetikleme amacıyla değer değişikliklerini izlediği 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, /application/config.message değerinin 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 @Bean öğeleri yeniler.
Not
Varsayılan olarak, @ConfigurationProperties açıklamalı fasulyeler bu kapsama eklenir.
Talep 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, bir yenileme girişiminde bulunulduğunda, tüm tetikleyiciler değişiklikler için belirtilen mağazada kontrol edilir. 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
spring-cloud-azure-appconfiguration-config-web kitaplığını kullandığınızda, özellikle bir servlet isteği gerçekleştiğinde, uygulama otomatik olarak yenilemeyi denetler. Bu olayın gönderilmesinin en yaygın yolu, @RestController içindeki uç noktalara yapılan isteklerle gerçekleşir.
Manual
Konsol uygulamaları gibi yalnızca spring-cloud-azure-appconfiguration-config kullanan uygulamalarda, AppConfigurationRefresh'in refreshConfiguration yöntemini çağırarak yenilemeyi tetikleyebilirsiniz.
AppConfigurationRefresh, herhangi bir @Bean'ye enjekte edebileceğiniz bir @Component'dir.
Ayrıca kitaplık Spring'in yapılandırma sistemini kullandığından, yenilemeyi tetiklemek yalnızca Azure Uygulama 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 (önerilmez)
Not
Bu yöntem artık önerilmez, ancak şu anda hala desteklenmektedir.
Yapılandırma değerlerinizi yenilemek için kitaplığı Azure Uygulama Yapılandırma deponuzdan anında iletme bildirimleri alacak şekilde ayarlayabilirsiniz spring-cloud-azure-appconfiguration-config-web . 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ı'nın 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ın sona ermesine izin verildiği refresh ve refresh-bus ile benzer şekilde çalışır. Hala refresh ve refresh-bus'yi kullanabilirsiniz, ancak kurulumda bir yanıta ihtiyaç duyduklarından bunları bir web kancası ile doğrudan Azure Event Grid'e bağlayamazsınız.
appconfiguration-refresh özelliği, yenileme aralığını sona erdirir; dolayısıyla bir sonraki yenileme kontrolünden önce kalan yenileme süresi beklenmez. ö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 titreme, uygulamanızın her örneğinin aynı anda yenilenmesini engeller.
management.endpoints.web.exposure.include= appconfiguration-refresh, appconfiguration-refresh-bus
Yenileme uç noktalarını kullanıma açmanın yanı sıra, kitaplık güvenlik için bir sorgu parametresi gerektirir. Varsayılan olarak hiçbir belirteç adı veya değeri yoktur, ancak aşağıdaki örnekte gösterildiği gibi uç noktaları kullanmak için bir tane ayarlamanız 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]
Webhook'ları 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, belirtilen 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.
Zorunlu 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 :
| İsim | Açıklama | Zorunlu | Varsayılan |
|---|---|---|---|
spring.cloud.azure.appconfiguration.refresh-interval |
Yenilemeler arasındaki standart süre. bir Duration'dir. |
Hayır | boş |
spring.cloud.azure.appconfiguration.refresh-interval ile yenilemek, 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 bilgi olarak depoladığı için, uygulamanız Uygulama Yapılandırması'nda herhangi bir sertifikayı Key Vault başvurusu olarak alabilir. Sertifikaların düzenli aralıklarla yenilenmesi gerektiğinden, istemci uygulamalarının da aynı sıklıkta güncellenmesi ve bu işlemin istemci yenileme aralığı ile yapılması gerekir.
Özellik işaretçilerini yenileme
Özellik bayrakları ve izleme etkinse, özellik bayrakları için yenileme aralığı varsayılan olarak 30 saniye olarak ayarlanmıştır. Yenileme aralığı sona erdiğinde sistem, verilen mağazadaki tüm özellik bayraklarını değişiklikler için denetler. 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
Sağlık göstergesi
İstemci kitaplığı, Azure Uygulama Yapılandırması deposuna veya depolarına bağlantının iyi durumda olup olmadığını denetleyen 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 dolmuş kimlik bilgileri ile hizmetle ilgili bir sorun gibi çeşitli sorunlardan kaynaklanabilir. İstemci kitaplığı, bir sonraki yenileme aralığında depoya yeniden bağlanmayı otomatik olarak dener.
- 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 dosyasında yapılandırma deposu devre dışı bırakıldı veya depo yapılandırması
fail-fastfalseolarak ayarlanırken, yapılandırma ya da yapılandırmalar başlangıçta yüklenemedi.
Sağlık göstergesini management.health.azure-app-configuration.enabled=true ayarlayarak etkinleş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 değiştirmek için ConfigurationClientCustomizer ve SecretClientCustomizer olmak üzere iki arabirim sağlanır. Her arayüz, aşağıdaki arayüz tanımlarında gösterildiği gibi, istemcinin yapılandırıldığı URI customize değeriyle birlikte ilgili oluşturucuyu alan bir String yöntemine sahiptir:
public interface ConfigurationClientCustomizer {
public void customize(ConfigurationClientBuilder builder, String endpoint);
}
public interface SecretClientCustomizer {
public void customize(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, customize içine geçirildiğinde kullanıma hazır şekilde ayarlanmıştır. kimlik bilgileri ve yeniden deneme ilkesi de dahil olmak üzere istemcilerde yapılan tüm değişiklikler, zaten mevcut olan varsayılanları 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();
}
}