Tutorial: Menggunakan bendera fitur di aplikasi Spring Boot

Pustaka Spring Boot Core Feature Management memberikan dukungan untuk menerapkan bendera fitur dalam aplikasi Spring Boot. Pustaka ini memungkinkan Anda secara deklaratif menambahkan bendera fitur ke kode Anda.

Pustaka Feature Management juga mengelola siklus hidup bendera fitur di belakang layar. Misalnya, pustaka me-refresh dan menyimpan status bendera dalam cache, atau menjamin status bendera agar tidak dapat diubah selama panggilan permintaan. Selain itu, pustaka Spring Boot menawarkan integrasi, termasuk tindakan pengontrol MVC, rute, dan middleware.

Tambahkan bendera fitur ke Mulai Cepat aplikasi Spring Boot menunjukkan beberapa cara untuk menambahkan bendera fitur di aplikasi Spring Boot. Tutorial ini menjelaskan metode tersebut secara lebih detail.

Dalam tutorial ini, Anda akan belajar cara:

  • Tambahkan bendera fitur di bagian kunci aplikasi Anda untuk mengontrol ketersediaan fitur.
  • Integrasikan dengan Azure App Configuration saat Anda menggunakannya untuk mengelola bendera fitur.

Menyiapkan manajemen fitur

Manajer fitur Spring Boot FeatureManager mendapatkan bendera fitur dari sistem konfigurasi asli kerangka kerja. Akibatnya, Anda dapat menentukan bendera fitur aplikasi menggunakan sumber konfigurasi apa pun yang didukung Spring Boot, termasuk file bootstrap.yml lokal atau variabel lingkungan. FeatureManager mengandalkan injeksi dependensi. Anda dapat mendaftarkan layanan manajemen fitur menggunakan konvensi standar:

private FeatureManager featureManager;

public HelloController(FeatureManager featureManager) {
    this.featureManager = featureManager;
}

Sebaiknya simpan bendera fitur di luar aplikasi dan kelola secara terpisah. Melakukan tindakan tersebut memungkinkan Anda mengubah status bendera kapan saja dan langsung menerapkan perubahan tersebut di aplikasi. App Configuration menyediakan tempat terpusat untuk mengatur dan mengontrol semua bendera fitur Anda melalui UI portal khusus. App Configuration juga mengirimkan bendera ke aplikasi Anda secara langsung melalui pustaka klien Spring Boot-nya.

Cara termudah untuk menghubungkan aplikasi Spring Boot Anda ke App Configuration adalah melalui penyedia konfigurasi:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-feature-management-web</artifactId>
</dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-dependencies</artifactId>
        <version>5.8.0</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Deklarasi bendera fitur

Setiap bendera fitur memiliki dua bagian: nama dan daftar satu atau beberapa filter yang digunakan untuk mengevaluasi apakah status fitur aktif (yaitu, jika nilainya ). Filter menentukan kasus penggunaan saat fitur harus diaktifkan.

Saat bendera fitur memiliki beberapa filter, daftar filter ditelusuri secara berurutan hingga salah satu filter yang menentukan fitur harus diaktifkan. Pada titik tersebut, bendera fitur aktif, dan hasil filter yang tersisa dilewati. Jika tidak ada filter yang menunjukkan fitur harus diaktifkan, artinya bendera fitur nonaktif.

Manajer fitur mendukung application.yml sebagai sumber konfigurasi untuk bendera fitur. Contoh berikut menunjukkan cara menyiapkan bendera fitur dalam file YAML:

feature-management:
  feature-a: true
  feature-b: false
  feature-c:
    enabled-for:
      -
        name: PercentageFilter
        parameters:
          Value: 50

Menurut konvensi, bagian feature-management dari dokumen YML ini digunakan untuk pengaturan bendera fitur. Contoh sebelumnya menampilkan tiga bendera fitur dengan filter yang ditentukan dalam properti EnabledFor:

  • feature-a adalah aktif.
  • feature-b adalah nonaktif.
  • feature-c menentukan filter bernama PercentageFilter dengan properti parameters. PercentageFilter adalah filter yang dapat dikonfigurasi. Dalam contoh ini, PercentageFilter menentukan peluang 50 persen agar status bendera feature-c menjadi aktif.

Pemeriksaan bendera fitur

Pola dasar manajemen fitur adalah untuk memeriksa apakah bendera fitur diatur ke aktif terlebih dahulu. Jika demikian, manajer fitur kemudian menjalankan tindakan yang ada dalam fitur tersebut. Contohnya:

private FeatureManager featureManager;
...
if (featureManager.isEnabledAsync("feature-a").block()) {
    // Run the following code
}

Injeksi dependensi

Di Spring Boot, Anda dapat mengakses manajer fitur FeatureManager melalui injeksi dependensi:

@Controller
@ConfigurationProperties("controller")
public class HomeController {
    private FeatureManager featureManager;

    public HomeController(FeatureManager featureManager) {
        this.featureManager = featureManager;
    }
}

Tindakan pengontrol

Di pengontrol MVC, Anda menggunakan atribut @FeatureGate untuk mengontrol apakah tindakan tertentu diaktifkan. Tindakan Index berikut mengharuskan feature-a untuk aktif sebelum dapat dijalankan:

@GetMapping("/")
@FeatureGate(feature = "feature-a")
public String index(Model model) {
    ...
}

Ketika pengontrol atau tindakan MVC diblokir karena bendera fitur pengontrol nonaktif, antarmuka DisabledFeaturesHandler terdaftar akan dipanggil. Antarmuka DisabledFeaturesHandler default akan menampilkan kode status 404 ke klien tanpa isi respons.

Filter MVC

Anda dapat menyiapkan filter MVC agar diaktifkan berdasarkan status bendera fitur. Kode berikut menambahkan filter MVC bernama FeatureFlagFilter. Filter ini dipicu dalam alur MVC hanya jika feature-a diaktifkan.

@Component
public class FeatureFlagFilter implements Filter {

    @Autowired
    private FeatureManager featureManager;

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if(!featureManager.isEnabled("feature-a")) {
            chain.doFilter(request, response);
            return;
        }
        ...
        chain.doFilter(request, response);
    }
}

Rute

Anda dapat menggunakan bendera fitur untuk mengalihkan rute. Kode berikut akan mengalihkan pengguna dari feature-a diaktifkan:

@GetMapping("/redirect")
@FeatureGate(feature = "feature-a", fallback = "/getOldFeature")
public String getNewFeature() {
    // Some New Code
}

@GetMapping("/getOldFeature")
public String getOldFeature() {
    // Some New Code
}

Langkah berikutnya

Dalam tutorial ini, Anda mempelajari cara menerapkan bendera fitur di aplikasi Spring Boot Anda menggunakan pustaka spring-cloud-azure-feature-management-web. Untuk pertanyaan lebih lanjut, lihat dokumentasi referensi, dokumentasi ini berisi semua detail tentang cara kerja pustaka Spring Cloud Azure App Configuration. Untuk informasi selengkapnya tentang dukungan manajemen fitur di Spring Boot dan App Configuration, lihat sumber daya berikut: