Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan pustaka Spring Cloud Azure App Configuration. Pustaka ini memuat konfigurasi dan flag fitur dari layanan Azure App Configuration. Pustaka menghasilkan PropertySource abstraksi agar sesuai dengan abstraksi yang sudah dihasilkan oleh lingkungan Spring, seperti variabel lingkungan, konfigurasi baris perintah, file konfigurasi lokal, dan sebagainya.
Spring adalah kerangka kerja aplikasi sumber terbuka yang dikembangkan oleh VMware yang menyediakan pendekatan modular yang disederhanakan untuk membuat aplikasi Java. Spring Cloud Azure adalah proyek sumber terbuka yang menyediakan integrasi Spring tanpa hambatan dengan layanan Azure.
Prasyarat
- Langganan Azure - buat satu secara gratis.
- Java Development Kit (JDK) versi 8 atau yang lebih tinggi.
- Apache Maven
- Azure CLI
Siapkan toko App Configuration Anda.
Gunakan perintah berikut untuk membuat penyimpanan konfigurasi aplikasi Azure Anda:
az appconfig create \
--resource-group <your-resource-group> \
--name <name-of-your-new-store> \
--sku Standard
Perintah ini membuat penyimpanan konfigurasi baru yang kosong. Anda dapat mengunggah konfigurasi dengan menggunakan perintah impor berikut:
az appconfig kv import \
--name <name-of-your-new-store> \
--source file \
--path <location-of-your-properties-file> \
--format properties \
--prefix /application/
Konfirmasikan konfigurasi Anda sebelum memuatnya. Anda dapat mengunggah file YAML dengan mengubah format ke YAML. Kolom awalan penting karena merupakan awalan default yang dimuat oleh perpustakaan klien.
Penggunaan pustaka
Untuk menggunakan fitur dalam aplikasi, Anda dapat membuatnya sebagai aplikasi Spring Boot. Cara paling nyaman untuk menambahkan dependensi adalah dengan Spring Boot starter com.azure.spring:spring-cloud-azure-starter-appconfiguration-config. Contoh file pom.xml berikut menggunakan Azure App Configuration:
<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>
Contoh berikut menunjukkan aplikasi Spring Boot dasar menggunakan App Configuration:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Untuk contoh ini, file application.properties berisi baris berikut:
spring.config.import=azureAppConfiguration
spring.cloud.azure.appconfiguration.stores[0].endpoint=${CONFIG_STORE_ENDPOINT}
CONFIG_STORE_ENDPOINT adalah variabel lingkungan dengan URL titik akhir ke Azure App Configuration Store Anda.
Catatan
Microsoft merekomendasikan penggunaan alur autentikasi paling aman yang tersedia. Alur autentikasi yang dijelaskan dalam prosedur ini, seperti untuk database, cache, olahpesan, atau layanan AI, memerlukan tingkat kepercayaan yang sangat tinggi dalam aplikasi dan membawa risiko yang tidak ada dalam alur lain. Gunakan alur ini hanya ketika opsi yang lebih aman, seperti identitas terkelola untuk koneksi tanpa kata sandi atau tanpa kunci, tidak layak. Untuk operasi komputer lokal, lebih suka identitas pengguna untuk koneksi tanpa kata sandi atau tanpa kunci.
Secara default, jika tidak ada konfigurasi yang diatur, konfigurasi yang dimulai dengan /application/ dimuat dengan label (No Label) default kecuali Profil Spring diatur, dalam hal ini label default adalah Profil Spring Anda.
Sumber properti bernama /application/https://<name-of-your-store>.azconfig.io/ dibuat berisi properti penyimpanan tersebut. Label yang digunakan dalam permintaan ditambahkan ke akhir nama. Jika tidak ada label yang diatur, karakter \0 ada sebagai spasi kosong.
Memuat konfigurasi
Library mendukung pemuatan satu atau beberapa penyimpanan App Configuration. Dalam situasi di mana kunci diduplikasi di beberapa toko, yang terakhir menang.
spring.cloud.azure.appconfiguration.stores[0].endpoint=[first-store-endpoint]
spring.cloud.azure.appconfiguration.stores[1].endpoint=[second-store-endpoint]
Dalam contoh ini, jika kedua penyimpanan memiliki kunci konfigurasi yang sama, konfigurasi di penyimpanan kedua memiliki prioritas tertinggi.
Catatan
Anda dapat menggunakan pengaturan Azure App Configuration seperti Konfigurasi Spring lainnya. Untuk informasi selengkapnya, lihat Fitur Inti dalam dokumentasi Spring Boot atau Mulai Cepat: Membuat aplikasi Java Spring dengan Azure App Configuration.
Memilih konfigurasi
Pustaka memuat konfigurasi menggunakan kunci dan labelnya. Secara default, konfigurasi yang dimulai dengan kunci /application/ dimuat. Label default adalah \0, yang muncul seperti (No Label) di portal Microsoft Azure. Jika profil Spring diatur, dan tidak ada label yang disediakan, maka label default adalah Profil Spring Anda, yaitu ${spring.profiles.active}.
Anda dapat mengonfigurasi konfigurasi mana yang dimuat dengan memilih filter kunci dan label yang berbeda:
spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter=[my-key]
spring.cloud.azure.appconfiguration.stores[0].selects[0].label-filter=[my-label]
Properti key-filter mendukung filter berikut:
| Filter utama | Efek |
|---|---|
* |
Cocok dengan kunci apa pun. |
abc |
Cocok dengan kunci bernama abc. |
abc* |
Cocok dengan nama kunci yang dimulai dengan abc. |
abc,xyz |
Cocok dengan kunci nama abc atau xyz. Dibatasi hingga lima nilai yang dipisahkan koma. |
Properti label-filter mendukung filter berikut:
| Etiket | Deskripsi |
|---|---|
* |
Cocok dengan label apa pun, termasuk \0. |
\0 |
Mencocokkan label null yang muncul sebagai (No Label) di portal Azure. |
1.0.0 |
Sama persis dengan label 1.0.0 . |
1.0.* |
Cocok dengan label yang dimulai dengan 1.0.*. |
,1.0.0 |
Cocok dengan label null dan 1.0.0. Dibatasi hingga lima nilai yang dipisahkan koma. |
Jika Anda menggunakan YAML dengan filter label, dan Anda ingin memuat konfigurasi tanpa label dan lebih banyak konfigurasi dengan label lain, Anda perlu menyertakan kosong ,. Misalnya, ,dev kecocokan \0 dan dev. Dalam hal ini, kelilingi filter label dengan tanda kutip tunggal. Nilai ini memungkinkan Anda memuat konfigurasi tanpa label terlebih dahulu, diikuti oleh konfigurasi dengan label tertentu, dalam filter yang sama:
spring:
cloud:
azure:
appconfiguration:
stores:
- selects:
- label-filter: ',1.0.0'
Catatan
Anda tidak dapat menggabungkan * dengan , di dalam filter. Dalam hal ini, Anda perlu menggunakan nilai pilih tambahan.
Saat Anda menggunakan * dalam filter label, dan beberapa konfigurasi dengan kunci yang sama dimuat, konfigurasi tersebut dimuat dalam urutan alfabet, dan label terakhir dalam urutan alfabet digunakan.
Profil pada Spring
Secara default, spring.profiles.active diatur sebagai default label-filter untuk semua konfigurasi yang dipilih. Anda dapat mengambil alih fungsionalitas ini dengan menggunakan label-filter. Anda dapat menggunakan Profil Spring di label-filter dengan menggunakan ${spring.profiles.active}, seperti ditunjukkan dalam contoh berikut:
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
Di yang pertama label-filter, pustaka pertama-tama memuat semua konfigurasi dengan \0 label, diikuti oleh semua konfigurasi yang cocok dengan Profil Spring. Karena berada di akhir, Profil Spring memiliki prioritas atas konfigurasi \0.
Di yang kedua label-filter, string _local ditambahkan ke akhir Profil Spring, meskipun hanya ke Profil Spring terakhir jika ada lebih dari satu.
Toko yang dinonaktifkan
Dengan menggunakan konfigurasi spring.cloud.azure.appconfiguration.enabled, Anda dapat menonaktifkan pemuatan untuk semua penyimpanan konfigurasi. Dengan konfigurasi spring.cloud.azure.appconfiguration.stores[0].enabled, Anda dapat menonaktifkan toko individual.
Catatan
Jika Anda menggunakan metrik kesehatan, Anda akan tetap melihat toko Anda tercantum, tetapi dengan nilai NOT LOADED. Saat Anda memeriksa sumber properti yang telah dimuat, Anda tetap melihatnya tercantum, tetapi tidak memiliki nilai. Perilaku ini disebabkan oleh properti yang spring.config.import telah diatur. Jika azureAppConfiguration tidak diatur untuk spring.config.import, tidak ada nilai yang ditampilkan.
Autentikasi
Pustaka mendukung semua bentuk identitas yang didukung oleh Azure Identity Library. Anda dapat melakukan autentikasi melalui konfigurasi untuk string koneksi dan identitas terkelola.
Catatan
Microsoft merekomendasikan penggunaan alur autentikasi paling aman yang tersedia. Alur autentikasi yang dijelaskan dalam prosedur ini, seperti untuk database, cache, olahpesan, atau layanan AI, memerlukan tingkat kepercayaan yang sangat tinggi dalam aplikasi dan membawa risiko yang tidak ada dalam alur lain. Gunakan alur ini hanya ketika opsi yang lebih aman, seperti identitas terkelola untuk koneksi tanpa kata sandi atau tanpa kunci, tidak layak. Untuk operasi komputer lokal, lebih suka identitas pengguna untuk koneksi tanpa kata sandi atau tanpa kunci.
String koneksi (tidak disarankan)
Autentikasi melalui string koneksi adalah bentuk paling sederhana untuk disiapkan, meskipun tidak disarankan. Anda dapat mengakses string koneksi toko dengan menggunakan perintah berikut:
az appconfig credential list --name <name-of-your-store>
Anda kemudian dapat mengatur spring.cloud.azure.appconfiguration.stores[0].connection-string properti ke string koneksi. Saat menggunakan pendekatan ini, sebaiknya atur string koneksi dalam file konfigurasi lokal ke nilai tempat penampung yang memetakan ke variabel lingkungan. Pendekatan ini memungkinkan Anda untuk menghindari penambahan string koneksi ke kontrol sumber.
Konfigurasi Spring Cloud Azure
Anda dapat menggunakan konfigurasi Spring Cloud Azure untuk mengonfigurasi pustaka. Anda bisa menggunakan properti berikut untuk mengonfigurasi pustaka:
spring.cloud.azure.appconfiguration.stores[0].endpoint= <URI-of-your-configuration-store>
Ketika hanya endpoint yang diatur, pustaka klien menggunakan DefaultAzureCredential untuk autentikasi.
Anda perlu menetapkan identitas yang digunakan untuk membaca konfigurasi. Anda dapat membuat penugasan ini dengan menggunakan perintah berikut:
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>
Catatan
Anda hanya dapat menentukan satu metode autentikasi per titik akhir: string koneksi, identitas yang ditetapkan pengguna, atau kredensial token. Jika Anda perlu mencampur dan mencocokkan, Anda dapat menggunakan ConfigurationClientCustomizer untuk memodifikasi ConfigurationClientBuilder untuk menggunakan metode yang berbeda.
Catatan
Microsoft merekomendasikan penggunaan alur autentikasi paling aman yang tersedia. Alur autentikasi yang dijelaskan dalam prosedur ini, seperti untuk database, cache, olahpesan, atau layanan AI, memerlukan tingkat kepercayaan yang sangat tinggi dalam aplikasi dan membawa risiko yang tidak ada dalam alur lain. Gunakan alur ini hanya ketika opsi yang lebih aman, seperti identitas terkelola untuk koneksi tanpa kata sandi atau tanpa kunci, tidak layak. Untuk operasi komputer lokal, lebih suka identitas pengguna untuk koneksi tanpa kata sandi atau tanpa kunci.
Replikasi geografis
Pustaka mendukung fitur replikasi geografis Azure App Configuration. Fitur ini memungkinkan Anda mereplikasi data Anda ke lokasi lain. Fitur ini berguna untuk ketersediaan tinggi dan pemulihan bencana.
Setiap replika yang Anda buat memiliki titik akhir khusus. Jika aplikasi Anda berada di beberapa geolokasi, Anda dapat memperbarui setiap penyebaran aplikasi Anda di lokasi untuk terhubung ke replika yang lebih dekat ke lokasi tersebut, yang membantu meminimalkan latensi jaringan antara aplikasi Anda dan App Configuration. Karena setiap replika memiliki kuota permintaan terpisah, pengaturan ini juga membantu skalabilitas aplikasi Anda saat berkembang ke layanan terdistribusi multi-wilayah.
Secara default, pustaka secara otomatis menemukan semua replika yang ada untuk penyimpanan konfigurasi. Ketika permintaan dibuat ke penyimpanan yang disediakan dan gagal, pustaka secara otomatis mencoba kembali permintaan terhadap replika yang tersedia.
Failover mungkin terjadi jika pustaka mengamati salah satu kondisi berikut:
- Menerima respons dengan kode status layanan yang tidak tersedia (HTTP 500 atau lebih tinggi) dari titik akhir.
- Mengalami masalah konektivitas jaringan.
- Permintaan dibatasi (kode status HTTP 429).
Setelah toko yang disediakan kembali online, pustaka secara otomatis mencoba kembali permintaan terhadap penyimpanan yang disediakan.
Jika Anda ingin mengontrol perilaku failover, Anda dapat secara manual menyediakan daftar penyimpanan yang akan digunakan untuk failover.
spring.cloud.azure.appconfiguration.stores[0].endpoints[0]=[your primary store endpoint]
spring.cloud.azure.appconfiguration.stores[0].endpoints[1]=[your replica store endpoint]
or
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]
Jika semua titik akhir replika yang disediakan gagal, pustaka mencoba menyambungkan ke replika penyimpanan utama yang ditemukan secara otomatis.
Anda dapat menonaktifkan replikasi dengan pengaturan spring.cloud.azure.appconfiguration.stores[0].replica-discovery-enabled=false.
Membuat penyimpanan konfigurasi dengan replikasi geografis
Untuk membuat replika penyimpanan konfigurasi, Anda dapat menggunakan Azure CLI atau portal Azure. Contoh berikut menggunakan Azure CLI untuk membuat replika di wilayah US Timur 2:
az appconfig replica create --location --name --store-name [--resource-group]
Nilai kunci
Azure App Configuration mendukung beberapa jenis nilai kunci, beberapa di antaranya memiliki fitur khusus yang terpasang di dalamnya. Azure App Configuration memiliki dukungan bawaan untuk tipe konten JSON, placeholder Spring, dan referensi Azure Key Vault.
Pengisi Sementara
Pustaka mendukung konfigurasi dengan gaya tempat penampung lingkungan ${}. Saat mereferensikan kunci Azure App Configuration dengan placeholder, hapus awalan pada referensi. Misalnya, /application/config.message dirujuk sebagai ${config.message}.
Catatan
Awalan yang dihapus cocok dengan nilai spring.cloud.azure.appconfiguration.stores[0].selects[0].key-filter. Awalan yang sedang dipangkas dapat diubah dengan mengatur nilai untuk spring.cloud.azure.appconfiguration.stores[0].trim-key-prefix[0].
JSON
Konfigurasi yang memiliki jenis application/json konten diproses sebagai objek JSON. Fitur ini memungkinkan Anda memetakan satu konfigurasi ke objek kompleks di dalam @ConfigurationProperties. Misalnya, pertimbangkan kunci /application/config.colors JSON dengan nilai berikut:
{
"Red": {
"value": [255, 0, 0]
},
"Blue": {
"value": [0, 255, 0]
},
"Green": {
"value": [0, 0, 255]
}
}
Kunci ini terhubung dengan kode berikut:
@ConfigurationProperties(prefix = "config")
public class MyConfigurations {
private Map<String, Color> colors;
}
Referensi dari Key Vault
Azure App Configuration dan library-nya mendukung mereferensikan rahasia yang disimpan di Key Vault. Pada App Configuration, Anda dapat membuat kunci dengan nilai yang memetakan rahasia yang disimpan di Key Vault. Rahasia tetap aman di Key Vault, tetapi Anda dapat mengaksesnya dengan cara yang sama seperti konfigurasi lain saat memuat aplikasi.
Aplikasi Anda menggunakan penyedia klien untuk mengambil referensi Key Vault, seperti halnya untuk kunci lain yang disimpan dalam App Configuration. Karena klien mengenali kunci sebagai referensi Key Vault, mereka memiliki tipe konten yang unik, dan klien terhubung ke Key Vault untuk mengambil nilai tersebut untuk Anda.
Catatan
Key Vault hanya memungkinkan rahasia diambil satu per satu, sehingga setiap referensi Key Vault yang disimpan dalam App Configuration menghasilkan permintaan terhadap Key Vault.
Membuat referensi Key Vault
Anda dapat membuat referensi Key Vault di portal Azure dengan pergi ke Konfigurasi Penjelajah>, klik Buat>, lalu pilih Referensi Key Vault. Anda kemudian dapat memilih rahasia untuk direferensikan dari salah satu Key Vault yang dapat Anda akses. Anda juga dapat membuat referensi Key Vault arbitrer dari tab Input. Di portal Azure, masukkan URI yang valid.
Anda juga dapat membuat referensi Key Vault melalui Azure CLI dengan menggunakan perintah berikut:
az appconfig kv set-keyvault \
--name <name-of-your-store> \
--key <key-name> \
--secret-identifier <URI-to-your-secret>
Anda dapat membuat pengidentifikasi rahasia apa pun melalui Azure CLI. Pengidentifikasi rahasia hanya memerlukan format {vault}/{collection}/{name}/{version?} di mana bagian versi bersifat opsional.
Menggunakan referensi Key Vault
Anda dapat menggunakan konfigurasi Spring Cloud Azure untuk mengonfigurasi pustaka. Anda dapat menggunakan kredensial yang sama yang digunakan untuk menyambungkan ke App Configuration untuk menyambungkan ke Azure Key Vault.
Anda juga dapat membuat cara yang SecretClientCustomizer sama seperti Anda akan membuat ConfigurationClientCustomizer untuk menyediakan metode autentikasi Anda sendiri.
Menyelesaikan rahasia yang bukan dari Key Vault
Pustaka App Configuration menyediakan metode untuk mengambil alih resolusi referensi brankas kunci. Misalnya, Anda dapat menggunakannya untuk menyelesaikan rahasia secara lokal di lingkungan dev. Resolusi ini dilakukan melalui KeyVaultSecretProvider.
KeyVaultSecretProvider, jika disediakan, dipanggil pada setiap referensi brankas kunci. Jika getSecret mengembalikan nilai non-null, nilai tersebut digunakan sebagai nilai rahasia. Jika tidak, Referensi Key Vault diselesaikan secara normal.
public class MySecretProvider implements KeyVaultSecretProvider {
@Override
public String getSecret(String uri) {
...
}
}
Manajemen fitur
Manajemen fitur menyediakan cara bagi aplikasi Spring Boot untuk mengakses konten secara dinamis. Manajemen fitur memiliki berbagai fungsi seperti yang berikut ini:
- Bendera fitur yang dapat mengaktifkan atau menonaktifkan konten
- Filter fitur untuk penargetan saat konten ditampilkan
- Filter fitur yang dikustomisasi
- Gerbang fitur untuk mengaktifkan endpoint secara fleksibel
Anda dapat mengaktifkan bendera fitur melalui konfigurasi berikut:
spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled= true
Bendera fitur yang diaktifkan dimuat ke dalam sistem konfigurasi Spring dengan awalan feature-management. Anda juga dapat mendaftarkan bendera fitur dalam file konfigurasi lokal. Untuk informasi selengkapnya, lihat bagian Deklarasi Flag Fitur.
Cara termudah untuk menggunakan manajemen fitur adalah dengan menggunakan pustaka spring-cloud-azure-feature-management dan spring-cloud-azure-feature-management-web. Perbedaan antara dua pustaka adalah pustaka spring-cloud-azure-feature-management-web mengambil ketergantungan pada pustaka spring-web maupun pustaka spring-webmvc untuk menambahkan lebih banyak fitur, seperti feature gates.
Secara default, semua bendera fitur dengan \0 label, dilihat sebagai (No Label), dimuat. Anda dapat mengonfigurasi bendera fitur yang dimuat dengan mengatur filter label, seperti yang diperlihatkan dalam contoh berikut:
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
Dasar-dasar manajemen fitur
Bendera fitur
Bendera fitur terdiri dari beberapa bagian termasuk nama dan daftar filter fitur yang digunakan untuk mengaktifkan fitur. Bendera fitur dapat memiliki status aktif atau nonaktif boolean, atau mereka dapat memiliki daftar filter fitur. Penanda fitur mengevaluasi filter fitur hingga salah satu mengembalikan true. Jika tidak ada filter fitur yang mengembalikan true, maka penanda fitur mengembalikan false.
Fitur penyaringan
Filter fitur menentukan skenario kapan fitur harus diaktifkan. Filter fitur dievaluasi secara sinkron.
Pustaka manajemen fitur dilengkapi dengan empat filter yang telah ditentukan sebelumnya: AlwaysOnFilter, PercentageFilter, TimeWindowFilter, dan TargetingFilter.
Anda dapat membuat filter fitur kustom. Misalnya, Anda dapat menggunakan filter fitur untuk memberikan pengalaman kustom bagi pelanggan yang menggunakan browser Microsoft Edge. Anda dapat menyesuaikan fitur dalam filter fitur ini, misalnya, untuk menampilkan header tertentu untuk audiens browser Microsoft Edge.
Deklarasi penanda fitur
Pustaka manajemen fitur mendukung Azure App Configuration bersama dengan application.yml atau application.properties sebagai sumber untuk bendera fitur. Berikut adalah contoh format yang digunakan untuk menyiapkan bendera fitur dalam file application.yml :
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
Contoh ini memiliki bendera fitur berikut:
-
feature-tdiatur kefalse. Pengaturan ini selalu mengembalikan nilai bendera fitur. -
feature-udigunakan dengan filter fitur. Filter ini didefinisikan di bawah propertienabled-for. Dalam hal ini,feature-umemiliki satu filter fitur yang disebutRandom, yang tidak memerlukan konfigurasi apa pun, jadi hanya properti nama yang diperlukan. -
feature-vmenentukan filter fitur bernamaTimeWindowFilter. Filter fitur ini dapat diteruskan parameter untuk digunakan sebagai konfigurasi. Dalam contoh ini,TimeWindowFilter, memasukkan waktu mulai dan berakhir selama fitur aktif. -
feature-wdigunakan untukAlwaysOnFilter, yang selalu bernilaitrue. Bidangevaluateini digunakan untuk menghentikan evaluasi filter fitur, dan menghasilkan filter fitur selalu mengembalikanfalse.
Mengevaluasi bendera fitur
Pustaka spring-cloud-azure-feature-management menyediakan FeatureManager untuk menentukan apakah feature flag diaktifkan.
FeatureManager menyediakan cara asinkron untuk memeriksa status bendera.
spring-cloud-azure-feature-management-web, bersama dengan menyediakan FeatureManager, berisi FeatureManagerSnapshot, yang menyimpan status bendera fitur yang dievaluasi sebelumnya dalam @RequestScope untuk menjamin bahwa semua permintaan mengembalikan nilai yang sama. Selain itu, pustaka web menyediakan @FeatureGate, yang dapat memblokir atau mengalihkan permintaan web ke titik akhir yang berbeda.
Pengujian penanda fitur
FeatureManager adalah @Bean yang dapat @Autowired atau disuntikkan ke dalam objek jenis @Component.
FeatureManager memiliki metode isEnabled yang, ketika diberikan nama flag fitur, mengembalikan statusnya.
@Autowired
FeatureManager featureManager;
...
if (featureManager.isEnabled("feature-t")) {
// Do Something
}
Catatan
FeatureManager juga memiliki versi asinkron yang isEnabled disebut isEnabledAsync.
Tanpa konfigurasi manajemen fitur atau ketika bendera fitur tidak ada, isEnabled selalu mengembalikan false. Jika bendera fitur yang ada dikonfigurasi dengan filter fitur yang tidak diketahui, maka FilterNotFoundException akan dilemparkan. Anda dapat mengubah perilaku ini untuk kembali false dengan mengonfigurasi fail-fast ke false. Tabel berikut ini menjelaskan fail-fast:
| Nama | Deskripsi | Wajib diisi | Bawaan |
|---|---|---|---|
spring.cloud.azure.feature.management.fail-fast |
Jika pengecualian terjadi, RuntimeException akan dilemparkan. Jika properti ini diatur ke false, maka isEnabled kembali false sebagai gantinya. |
Tidak | true |
Satu-satunya perbedaan antara FeatureManagerSnapshot dan FeatureManager adalah penyimpanan sementara hasil di @RequestScope.
Gerbang fitur
Dengan pustaka web manajemen fitur, Anda dapat mengharuskan fitur tertentu diaktifkan untuk menjalankan titik akhir. Anda dapat menyiapkan persyaratan ini dengan menggunakan @FeatureGate anotasi, seperti yang ditunjukkan dalam contoh berikut:
@GetMapping("/featureT")
@FeatureGate(feature = "feature-t")
@ResponseBody
public String featureT() {
...
}
Anda hanya dapat mengakses featureT endpoint jika "fitur-t" diaktifkan.
Penanganan tindakan dinonaktifkan
Ketika titik akhir diblokir karena fitur yang ditentukannya dinonaktifkan, DisabledFeaturesHandler dipanggil. Secara default, HTTP 404 dikembalikan. Anda dapat mengambil alih perilaku ini dengan menerapkan DisabledFeaturesHandler, seperti yang ditunjukkan dalam contoh berikut:
@Component
public class MyDisabledFeaturesHandler implements DisabledFeaturesHandler {
@Override
public HttpServletResponse handleDisabledFeatures(HttpServletRequest request, HttpServletResponse response) {
...
return response;
}
}
Pengarahan
Rute tertentu mungkin mengekspos kemampuan aplikasi yang terjaga oleh fitur. Jika fitur dinonaktifkan, Anda dapat mengalihkan rute ini ke titik akhir lain, seperti yang ditunjukkan dalam contoh berikut:
@GetMapping("/featureT")
@FeatureGate(feature = "feature-t" fallback= "/oldEndpoint")
@ResponseBody
public String featureT() {
...
}
@GetMapping("/oldEndpoint")
@ResponseBody
public String oldEndpoint() {
...
}
Filter fitur bawaan
Ada beberapa filter fitur yang disertakan dengan paket spring-cloud-azure-feature-management. Filter fitur ini ditambahkan secara otomatis.
Filter Selalu Aktif
Filter ini selalu mengembalikan true. Untuk contoh penggunaan, lihat bagian deklarasi tanda fitur.
Filter Persentase
Setiap kali diperiksa, evaluasi PercentageFilter dapat mengembalikan hasil yang berbeda. Anda dapat menghindari inkonsistensi ini dengan menggunakan FeatureManagementSnapshot, yang menyimpan hasil bendera fitur per permintaan.
feature-management:
feature_flags:
- name: feature-v
conditions:
client_filters:
- name: PercentageFilter
parameters:
Value: 50
Penyaring Jendela Waktu
Filter ini menyediakan kemampuan untuk mengaktifkan fitur berdasarkan jendela waktu. Jika Anda hanya menentukan End, fitur dianggap aktif hingga waktu tersebut. Jika Anda hanya menentukan Start, fitur dianggap aktif di semua titik setelah waktu tersebut. Jika Anda menentukan keduanya, fitur dianggap valid antara dua kali.
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"
Filter ini juga mendukung filter jendela waktu berulang. Ini mendukung pengulangan harian dan mingguan, bersama dengan waktu kedaluwarsa.
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
Pola pengulangan ini terjadi setiap minggu pada hari Senin dan Rabu dari pukul 00:00:00 GMT hingga 12:00:00 GMT dan tidak kedaluwarsa.
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"
Pola pengulangan ini terjadi setiap hari dari 00:00:00 GMT hingga 12:00:00 GMT hingga tanggal akhir.
FilterPenyasaran
Filter ini menyediakan kemampuan untuk mengaktifkan fitur untuk audiens target. Untuk penjelasan mendalam tentang penargetan, lihat bagian penargetan . Parameter filter mencakup objek audiens yang menjelaskan pengguna, grup, dan persentase default dari basis pengguna yang harus memiliki akses ke fitur tersebut. Untuk setiap objek grup yang tercantum dalam audiens target, persentase diperlukan yang menentukan persentase anggota grup yang memiliki akses ke fitur tersebut. Pengguna mengaktifkan fitur dalam kasus berikut:
- Pengguna disebutkan pada bagian pengguna secara langsung.
- Pengguna berada dalam persentase yang tercakup dari setiap peluncuran grup.
- Pengguna termasuk dalam persentase peluncuran default.
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
Filter fitur kustom
Membuat filter fitur kustom menyediakan cara untuk mengaktifkan fitur berdasarkan kriteria yang Anda tentukan. Untuk membuat filter fitur kustom, Anda harus mengimplementasikan FeatureFilter antarmuka.
FeatureFilter memiliki satu metode evaluate. Ketika sebuah fitur dapat diaktifkan dengan filter fitur, metode evaluate dipanggil. Jika evaluate mengembalikan true, itu berarti bahwa fitur harus diaktifkan. Jika mengembalikan false, ia terus mengevaluasi filter fitur hingga menampilkan true. Jika semua filter mengembalikan false, maka fitur dimatikan.
Filter fitur didefinisikan sebagai Spring Beans, sehingga mereka ditentukan sebagai @Component atau dalam @Configuration.
@Component("Random")
public class Random implements FeatureFilter {
@Override
public boolean evaluate(FeatureFilterEvaluationContext context) {
double chance = Double.valueOf((String) context.getParameters().get("chance"));
return Math.random() > chance / 100;
}
}
Filter fitur berparameter
Beberapa filter fitur memerlukan parameter untuk menentukan apakah fitur harus diaktifkan. Misalnya, filter fitur browser mungkin mengaktifkan fitur untuk sekumpulan browser tertentu. Anda mungkin ingin fitur diaktifkan untuk browser Microsoft Edge dan Chrome, tetapi bukan Firefox. Untuk menyiapkan situasi ini, Anda dapat merancang filter fitur untuk mengharapkan adanya parameter. Parameter ini akan ditentukan dalam konfigurasi fitur dan dalam kode, dan akan dapat diakses melalui FeatureFilterEvaluationContext parameter evaluate.
FeatureFilterEvaluationContext memiliki properti parameters, yang merupakan Map<String, Object>.
Penargetan
Penargetan adalah strategi manajemen fitur yang memungkinkan pengembang untuk secara progresif meluncurkan fitur baru ke basis pengguna mereka. Strategi ini dibangun berdasarkan konsep menargetkan sekumpulan pengguna yang dikenal sebagai audiens target. Audiens terdiri dari pengguna, grup, dan persentase tertentu dari seluruh basis pengguna. Grup yang disertakan dalam audiens dapat dipecah lebih jauh ke dalam persentase dari total anggota mereka.
Langkah-langkah berikut menunjukkan contoh peluncuran progresif untuk fitur 'Beta' baru:
- Pengguna individu Jeff dan Alicia diberikan akses ke Beta.
- Pengguna lain, Mark, meminta untuk ikut serta dan disertakan.
- Dua puluh persen dari grup yang dikenal sebagai pengguna "Ring1" disertakan dalam Beta.
- Jumlah pengguna "Ring1" yang termasuk dalam beta ditingkatkan menjadi 100 persen.
- Lima persen dari basis pengguna disertakan dalam beta.
- Persentase peluncuran ditingkatkan menjadi 100 persen dan fitur ini sepenuhnya diluncurkan.
Strategi untuk meluncurkan fitur ini terintegrasi dalam pustaka melalui filter fitur yang disertakan TargetingFilter.
Penargetan dalam aplikasi
Contoh aplikasi web yang menggunakan filter fitur penargetan tersedia dalam proyek contoh.
Untuk mulai menggunakan TargetingFilter dalam aplikasi, Anda harus menambahkannya sebagai @Bean seperti filter fitur lainnya.
TargetingFilter bergantung pada yang lain @Bean untuk ditambahkan ke aplikasi TargetingContextAccessor.
TargetingContextAccessor memungkinkan untuk mendefinisikan TargetingContext saat ini yang akan digunakan untuk menetapkan ID pengguna dan grup saat ini, seperti yang ditunjukkan dalam contoh berikut:
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);
}
}
Opsi evaluasi penargetan
Opsi tersedia untuk menyesuaikan bagaimana evaluasi penargetan dilakukan di seluruh TargetingFilter tersebut. Selama pembuatan TargetingEvaluationOptions, Anda dapat mengatur parameter opsional, TargetingFilter.
@Bean
public TargetingFilter targetingFilter(MyTargetingContextAccessor contextAccessor) {
return new TargetingFilter(contextAccessor, new TargetingEvaluationOptions().setIgnoreCase(true));
}
Penyegaran konfigurasi
Mengaktifkan refresh konfigurasi memungkinkan Anda mendapatkan nilai terbaru dari penyimpanan App Configuration tanpa harus menghidupkan ulang aplikasi.
Untuk mengaktifkan refresh, Anda perlu mengaktifkan pemantauan bersama dengan pemicu pemantauan. Pemicu pemantauan adalah kunci dengan label opsional yang dipantau sistem untuk perubahan nilai guna memicu pembaruan. Nilai pemicu pemantauan dapat berupa nilai apa pun, selama berubah saat refresh diperlukan.
Catatan
Setiap operasi yang mengubah ETag dari pemicu pemantauan menyebabkan penyegaran, seperti perubahan format konten.
spring:
cloud:
azure:
appconfiguration:
stores:
- monitoring:
enabled: true
triggers:
- key: [my-watched-key]
label: [my-watched-label]
Untuk memicu refresh konfigurasi, ubah nilai kunci di penyimpanan konfigurasi Anda. Kemudian, perbarui salah satu kunci jam tangan ke nilai baru. Perubahan ini memicu pembuatan log. Misalnya, mengubah nilai /application/config.message pemicu pesan log berikut:
INFO 17496 --- [TaskScheduler-1] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [config.message]
Setelah aplikasi menghasilkan log, ia me-refresh semua @Bean dalam cakupan refresh.
Catatan
Secara otomatis, bean beranotasi @ConfigurationProperties disertakan dalam cakupan ini.
Refresh berbasis penarikan
Pustaka App Configuration Spring mendukung kemampuan untuk memeriksa interval refresh secara berkala untuk perubahan yang dilakukan pada pemicu pemantauan. Secara default, interval refresh diatur ke 30 detik. Setelah interval refresh berlalu, saat upaya refresh dilakukan, semua pemicu dicentang di penyimpanan yang diberikan untuk perubahan. Setiap perubahan pada kunci menyebabkan refresh dipicu. Karena pustaka terintegrasi dengan sistem refresh Spring, setiap refresh memuat ulang semua konfigurasi dari semua penyimpanan. Anda dapat mengatur interval refresh ke interval apa pun yang lebih lama dari 1 detik. Unit yang didukung untuk interval refresh masing-masing adalah s, , mh, dan d untuk detik, menit, jam, dan hari. Contoh berikut mengatur interval refresh menjadi 5 menit:
spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 5m
Otomatis
Saat Anda menggunakan pustaka spring-cloud-azure-appconfiguration-config-web, aplikasi secara otomatis memeriksa pembaruan setiap kali permintaan servlet terjadi, khususnya pada ServletRequestHandledEvent. Cara paling umum peristiwa ini dikirim adalah melalui permintaan ke endpoint dalam @RestController.
Buku Petunjuk
Dalam aplikasi yang hanya menggunakan spring-cloud-azure-appconfiguration-config, seperti aplikasi konsol, Anda dapat memicu refresh secara manual dengan memanggil metode AppConfigurationRefresh milik refreshConfiguration.
AppConfigurationRefresh adalah @Bean yang dapat Anda suntikkan ke dalam @Component.
Selain itu, karena pustaka menggunakan sistem konfigurasi Spring, memicu penyegaran menyebabkan semua konfigurasi Anda diperbarui, bukan hanya memuat ulang yang berasal dari penyimpanan Azure App Configuration Anda.
Refresh berbasis pendorongan (tidak disarankan)
Catatan
Metode ini tidak lagi direkomendasikan, tetapi saat ini masih didukung.
Anda dapat menyiapkan pustaka spring-cloud-azure-appconfiguration-config-web untuk menerima notifikasi push dari toko Azure App Configuration untuk menyegarkan nilai konfigurasi Anda. Anda dapat menyiapkan konfigurasi ini melalui Azure Event Grid Web Hook, yang dapat Anda konfigurasi untuk mengirim pemberitahuan perubahan ke kunci yang ditentukan. Dengan menambahkan pustaka Spring Actuator sebagai dependensi, Anda dapat mengekspos titik akhir refresh App Configuration. Ada dua titik akhir yang berbeda: appconfiguration-refresh dan appconfiguration-refresh-bus. Titik akhir ini bekerja mirip dengan padanannya refresh dan refresh-bus, di mana titik akhir konfigurasi aplikasi mengakhiri interval refresh alih-alih memaksa refresh saat mencapai akhir interval. Anda masih dapat menggunakan refresh dan refresh-bus, tetapi Anda tidak dapat menyambungkannya langsung ke Azure Event Grid dengan Web Hook karena memerlukan respons dalam penyiapan.
Properti appconfiguration-refresh mengakhiri interval refresh, sehingga tidak perlu menunggu sisa interval pembaruan sebelum pemeriksaan refresh berikutnya. Properti appconfiguration-refresh-bus mengirimkan pemberitahuan ke layanan olahpesan yang terhubung, seperti Azure Service Bus, untuk memberi tahu semua instans aplikasi untuk di-refresh. Dalam kedua kasus, itu tidak sepenuhnya kedaluwarsa pada interval refresh, tetapi dimatikan oleh jumlah jitter kecil. Jitter ini memastikan bahwa setiap instans aplikasi Anda tidak melakukan penyegaran pada waktu yang bersamaan.
management.endpoints.web.exposure.include= appconfiguration-refresh, appconfiguration-refresh-bus
Selain mengekspos titik akhir refresh, pustaka memerlukan parameter kueri untuk keamanan. Tidak ada nama atau nilai token secara default, tetapi Anda harus mengaturnya untuk menggunakan titik akhir, seperti yang ditunjukkan dalam contoh berikut:
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]
Menyiapkan webhook
Untuk menyiapkan webhook, buka penyimpanan Azure App Configuration Anda dan buka Peristiwa dari Menu Navigasi. Lalu, pilih Langganan Acara. Atur nama acara Anda dan pilih jenis titik akhir menjadi Web Hook. Memilih Web Hook menyebabkan opsi Endpoint muncul. Pilih Memilih titik akhir. Titik akhir Anda akan terlihat seperti contoh berikut: https://www.myaplication.com/actuator/appconfiguration-refresh?myTokenName=mySecret.
KonfirmasiKan Pilihan mengirimkan pemberitahuan penyiapan ke URI yang diberikan dan mengharapkan respons. Jika tidak ada respons yang dikembalikan, penyiapan gagal. Pengaturan azure-spring-cloud-appconfiguration-web pustaka untuk titik akhir mengembalikan tanggapan yang tepat jika toko Azure App Configuration dikonfigurasi untuk aplikasi. Konfirmasi ini dapat dikirim dengan cara lain. Untuk informasi selengkapnya tentang pengiriman webhook, lihat Pengiriman peristiwa webhook.
Catatan
Validasi ini hanya terjadi pada pembuatan atau modifikasi titik akhir.
Kami sangat menyarankan agar Anda menyiapkan filter, karena jika tidak, penyegaran akan terjadi setelah setiap pembuatan dan modifikasi kunci.
Paksa refresh klien
Anda dapat mengonfigurasi pustaka untuk memaksa pembaruan semua konfigurasi pada interval pembaruan. Tabel berikut ini menjelaskan refresh-interval properti :
| Nama | Deskripsi | Wajib diisi | Bawaan |
|---|---|---|---|
spring.cloud.azure.appconfiguration.refresh-interval |
Jumlah waktu standar antara refresh.
Duration adalah sebuah. |
Tidak | nol |
Refresh dengan spring.cloud.azure.appconfiguration.refresh-interval tidak memeriksa kunci pemantauan yang dikonfigurasi. Properti ini digunakan untuk memastikan rahasia Key Vault selalu diperbarui karena Azure App Configuration tidak dapat mengetahui kapan rahasia tersebut diperbarui.
Karena Azure Key Vault menyimpan pasangan kunci publik dan privat sertifikat sebagai rahasia, aplikasi Anda dapat mengambil sertifikat apa pun sebagai referensi Key Vault di App Configuration. Karena sertifikat perlu diputar secara berkala, aplikasi klien perlu diperbarui sesering mungkin, yang dapat dilakukan dengan menggunakan interval refresh klien.
Perbarui pengaturan fitur
Jika bendera fitur dan pemantauan diaktifkan, maka secara default interval refresh untuk bendera fitur diatur ke 30 detik. Ketika interval refresh berakhir, sistem memeriksa semua bendera fitur di penyimpanan yang diberikan untuk perubahan. Setiap perubahan pada kunci menyebabkan refresh dipicu. Karena pustaka terintegrasi dengan sistem refresh Spring, setiap refresh memuat ulang semua konfigurasi dari semua penyimpanan. Anda dapat mengatur interval refresh ke interval apa pun yang lebih lama dari 1 detik. Unit yang didukung untuk interval refresh masing-masing adalah s, , mh, dan d untuk detik, menit, jam, dan hari. Contoh berikut mengatur interval refresh menjadi 5 menit:
spring.cloud.azure.appconfiguration.stores[0].monitoring.feature-flag-refresh-interval= 5m
Indikator kesehatan
Pustaka klien dilengkapi dengan indikator kesehatan yang mengecek apakah koneksi ke Azure App Configuration sehat. Jika diaktifkan untuk setiap penyimpanan, ini memberikan salah satu nilai status berikut:
- UP - Koneksi terakhir berhasil.
- DOWN- Koneksi terakhir menghasilkan kode kesalahan non-200. Status ini bisa disebabkan oleh masalah mulai dari kredensial yang kedaluwarsa hingga masalah layanan. Pustaka klien secara otomatis mencoba kembali untuk menyambungkan ke penyimpanan pada interval refresh berikutnya.
- NOT LOADED - Penyimpanan konfigurasi tercantum dalam file konfigurasi lokal, tetapi penyimpanan konfigurasi tidak dimuat dari file saat startup. Penyimpanan konfigurasi dinonaktifkan dalam file konfigurasi atau konfigurasi-konfigurasi gagal dimuat saat startup ketika konfigurasi penyimpanan pada
fail-fastdiatur kefalse.
Anda dapat mengaktifkan indikator kesehatan dengan mengatur management.health.azure-app-configuration.enabled=true.
Kustomisasi klien
Perpustakaan App Configuration menggunakan Azure SDK for Java untuk menghubungkan dengan Azure App Configuration dan Azure Key Vault. Dua antarmuka, ConfigurationClientCustomizer dan SecretClientCustomizer, disediakan untuk memodifikasi klien. Setiap antarmuka memiliki customize metode yang menerima builder masing-masing bersama-sama dengan String nilai URI untuk mana klien dikonfigurasi, seperti yang ditunjukkan dalam definisi antarmuka berikut.
public interface ConfigurationClientCustomizer {
public void customize(ConfigurationClientBuilder builder, String endpoint);
}
public interface SecretClientCustomizer {
public void customize(SecretClientBuilder builder, String endpoint);
}
Antarmuka ini memungkinkan penyesuaian klien HTTP dan konfigurasinya. Contoh berikut mengganti default HttpClient dengan yang lain yang menggunakan proksi untuk semua lalu lintas yang diarahkan ke App Configuration dan Key Vault.
Catatan
ConfigurationClientBuilder dan SecretClientBuilder sudah disiapkan untuk digunakan ketika diteruskan ke customize. Setiap perubahan pada klien, termasuk kredensial dan kebijakan coba lagi, ambil alih default yang sudah ada.
Anda juga dapat melakukan konfigurasi ini dengan menggunakan konfigurasi Spring Cloud Azure.
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();
}
}