Kurz: Použití příznaků funkcí v aplikaci Spring Boot

Knihovny Spring Boot Core Feature Management poskytují podporu pro implementaci příznaků funkcí v aplikaci Spring Boot. Tyto knihovny umožňují deklarativní přidávání příznaků funkcí do kódu.

Knihovny správy funkcí také spravují životní cyklus příznaku funkcí na pozadí. Knihovny například aktualizují a ukládají do mezipaměti stavy příznaku nebo zaručují, že stav příznaku bude během volání žádosti neměnný. Knihovna Spring Boot navíc nabízí integrace, včetně akcí kontroleru MVC, tras a middlewaru.

Rychlý start Přidání příznaků funkcí do aplikace Spring Boot ukazuje několik způsobů přidání příznaků funkcí do aplikace Spring Boot. Tento kurz vysvětluje tyto metody podrobněji.

V tomto kurzu se naučíte, jak:

  • Přidejte příznaky funkcí do klíčových částí aplikace, abyste mohli řídit dostupnost funkcí.
  • Integrujte s App Configuration, když ji používáte ke správě příznaků funkcí.

Nastavení správy funkcí

Správce FeatureManager funkcí Spring Boot získá příznaky funkcí z nativního konfiguračního systému architektury. V důsledku toho můžete definovat příznaky funkcí vaší aplikace pomocí libovolného zdroje konfigurace, který Spring Boot podporuje, včetně místního souboru bootstrap.yml nebo proměnných prostředí. FeatureManager závisí na injektáži závislostí. Služby správy funkcí můžete zaregistrovat pomocí standardních konvencí:

private FeatureManager featureManager;

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

Doporučujeme uchovávat příznaky funkcí mimo aplikaci a spravovat je samostatně. To vám umožní kdykoli změnit stavy příznaku a tyto změny se projeví v aplikaci okamžitě. App Configuration poskytuje centralizované místo pro uspořádání a řízení všech příznaků funkcí prostřednictvím vyhrazeného uživatelského rozhraní portálu. App Configuration také doručuje příznaky vaší aplikaci přímo prostřednictvím svých klientských knihoven Spring Boot.

Nejjednodušší způsob, jak připojit aplikaci Spring Boot k App Configuration, je prostřednictvím poskytovatele konfigurace:

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

Deklarace příznaku funkce

Každý příznak funkce má dvě části: název a seznam jednoho nebo více filtrů, které se používají k vyhodnocení, jestli je stav funkce zapnutý (to znamená, když je Truejejí hodnota ). Filtr definuje případ použití, kdy má být funkce zapnutá.

Pokud má příznak funkce více filtrů, seznam filtrů se prochází v pořadí, dokud jeden z filtrů nerozhodne, že by měla být funkce povolena. V tomto okamžiku je příznak funkce zapnutý a všechny zbývající výsledky filtru se přeskočí. Pokud žádný filtr nenaznačuje, že by funkce měla být povolená, je příznak funkce vypnutý.

Správce funkcí podporuje application.yml jako zdroj konfigurace pro příznaky funkcí. Následující příklad ukazuje, jak nastavit příznaky funkcí v souboru YAML:

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

Podle konvence se feature-management část tohoto dokumentu YML používá pro nastavení příznaků funkcí. Předchozí příklad ukazuje tři příznaky funkcí s jejich filtry definovanými EnabledFor ve vlastnosti:

  • feature-a je zapnuté.
  • feature-b je vypnutý.
  • feature-c určuje filtr s názvem PercentageFilter s parameters vlastností. PercentageFilter je konfigurovatelný filtr. V tomto příkladu PercentageFilter určuje 50procentní pravděpodobnost, že feature-c příznak bude zapnutý.

Kontroly příznaku funkce

Základním vzorem správy funkcí je nejprve zkontrolovat, jestli je příznak funkce nastavený na zapnuto. Pokud ano, správce funkcí pak spustí akce, které funkce obsahuje. Příklad:

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

Injektáž závislostí

Ve Spring Bootu máte přístup ke správci FeatureManager funkcí prostřednictvím injektáže závislostí:

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

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

Akce kontroleru

V řadičích MVC můžete pomocí atributu @FeatureGate určit, jestli je povolená konkrétní akce. Před spuštěním musí feature-a být zapnutá následující Index akce:

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

Pokud je kontroler nebo akce MVC zablokovaná, protože je vypnutý příznak řídicí funkce, je voláno registrované DisabledFeaturesHandler rozhraní. Výchozí DisabledFeaturesHandler rozhraní vrátí klientovi stavový kód 404 bez textu odpovědi.

Filtry MVC

Filtry MVC můžete nastavit tak, aby byly aktivované na základě stavu příznaku funkce. Následující kód přidá filtr MVC s názvem FeatureFlagFilter. Tento filtr se aktivuje v kanálu MVC pouze v případě, že feature-a je povolený.

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

Trasy

K přesměrování tras můžete použít příznaky funkcí. Následující kód přesměruje uživatele z feature-a je povoleno:

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

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

Další kroky

V tomto kurzu jste zjistili, jak implementovat příznaky funkcí v aplikaci Spring Boot pomocí spring-cloud-azure-feature-management-web knihoven. Další dotazy najdete v referenční dokumentaci, kde najdete všechny podrobnosti o tom, jak knihovna Spring Cloud Azure App Configuration funguje. Další informace o podpoře správy funkcí ve Spring Bootu a App Configuration najdete v následujících zdrojích informací: