Zelfstudie: Functievlaggen gebruiken in een Spring Boot-app

De Spring Boot Core Feature Management-bibliotheken bieden ondersteuning voor het implementeren van functievlaggen in een Spring Boot-toepassing. Deze bibliotheken bieden u de mogelijkheid om functievlaggen declaratief toe te voegen aan uw code.

De Feature Management-bibliotheken beheren ook de levenscyclus van functievlaggen achter de schermen. Bijvoorbeeld: de bibliotheken worden vernieuwd en slaan vlagstatussen op in een cache of garanderen dat een vlagstatus onveranderbaar is tijdens het aanroepen van een aanvraag. Daarnaast biedt de Spring Boot-bibliotheek integraties, waaronder MVC-controlleracties, routes en middleware.

De quickstart Functievlaggen toevoegen aan een Spring boot-app bevat verschillende manieren om functievlaggen toe te voegen in een Spring Boot-toepassing. In deze zelfstudie worden deze methoden uitgebreid beschreven.

In deze zelfstudie leert u het volgende:

  • Voeg functievlaggen toe aan de belangrijkste onderdelen van uw toepassing om de beschikbaarheid van functies te bepalen.
  • Integreer met App Configuration wanneer u deze gebruikt voor het beheren van functievlaggen.

Functiebeheer instellen

De Spring Boot-functiebeheerder FeatureManager krijgt functievlaggen van het systeemeigen configuratiesysteem van het Framework. Als gevolg hiervan kunt u de functievlaggen van uw toepassing definiƫren met behulp van een configuratiebron die Spring Boot ondersteunt, met inbegrip van het lokale bootstrap.yml-bestand of omgevingsvariabelen. FeatureManager maakt gebruik van afhankelijkheidsinjectie. U kunt de functiebeheerservices registreren met behulp van standaard conventies:

private FeatureManager featureManager;

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

U wordt aangeraden de functievlaggen buiten de toepassing te houden en deze afzonderlijk te beheren. Als u dit doet, kunt u de status van de vlaggen op elk gewenst moment wijzigen. Deze wijzigingen worden direct doorgevoerd in de toepassing. App Configuration biedt een centrale locatie voor het organiseren en beheren van al uw functievlaggen via een toegewezen portal-gebruikersinterface. App Configuration levert ook rechtstreeks de vlaggen aan uw toepassing via de clientbibliotheken voor Spring Boot.

De eenvoudigste manier om uw Spring Boot-toepassing te verbinden met App Configuration is via de configuratieprovider:

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

Declaratie van functievlaggen

Elke functievlag bestaat uit twee delen: een naam en een lijst met een of meer filters die worden gebruikt om te evalueren of de status van een functie aan is (dat wil zeggen, wanneer de waarde ervan True is). Een filter definieert een use-case voor wanneer een functie moet worden ingeschakeld.

Wanneer een functievlag meerdere filters heeft, wordt de filterlijst in de juiste volgorde doorgelopen, totdat een van de filters bepaalt dat de functie moet worden ingeschakeld. Op dat moment is de functievlag aan en worden alle resterende filterresultaten overgeslagen. Als geen enkel filter aangeeft dat de functie moet worden ingeschakeld, is de functievlag uit.

De functiebeheerder ondersteunt application.yml als een configuratiebron voor functievlaggen. In het volgende voorbeeld ziet u hoe u functievlaggen kunt instellen in een YAML-bestand:

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

Standaard wordt het gedeelte feature-management van dit YML-document gebruikt voor instellingen voor functievlaggen. Het vorige voorbeeld toont drie functievlaggen waarvoor de filters zijn gedefinieerd in de eigenschap EnabledFor:

  • feature-a is aan.
  • feature-b is uit.
  • Met feature-c geeft u een filter op met de naam PercentageFilter met een eigenschap parameters. PercentageFilter is een configureerbaar filter. In dit voorbeeld geeft PercentageFilter een kans van 50 procent dat de vlag feature-caan is.

Controles van functievlaggen

Het basispatroon van functiebeheer is om eerst te controleren of een functievlag is ingesteld op aan. Als dit het geval is, voert het functiebeheer de acties uit die de functie bevat. Bijvoorbeeld:

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

Afhankelijkheidsinjectie

In Spring Boot krijgt u toegang tot de functiebeheerder FeatureManager via afhankelijkheidsinjectie:

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

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

Controller-acties

In MVC-controllers gebruikt u het kenmerk @FeatureGate om te controleren of een bepaalde actie is ingeschakeld. Voor de volgende actie Index moet feature-aaan zijn voordat deze kan worden uitgevoerd:

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

Wanneer een MVC-controller of -actie wordt geblokkeerd omdat de vlag voor het controleren van de functie uit is, wordt een geregistreerde DisabledFeaturesHandler-interface aangeroepen. De standaard DisabledFeaturesHandler-interface retourneert een 404-statuscode naar de client zonder hoofdtekst van de reactie.

MVC-filters

U kunt MVC-filters zo instellen dat ze worden geactiveerd op basis van de status van een functievlag. Met de volgende code wordt een MVC-filter toegevoegd met de naam FeatureFlagFilter. Dit filter wordt alleen in de MVC-pijplijn geactiveerd als feature-a is ingeschakeld.

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

Routes

U kunt functievlaggen gebruiken om routes om te leiden. Met de volgende code wordt een gebruiker omgeleid als feature-a is ingeschakeld:

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

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

Volgende stappen

In deze zelfstudie hebt u geleerd hoe u functievlaggen kunt implementeren in een Spring Boot-toepassing met behulp van de spring-cloud-azure-feature-management-web-bibliotheken. Zie de referentiedocumentatie voor meer vragen. Hierin vindt u alle details over de werking van de Spring Cloud Azure App Configuration-bibliotheek. Zie de volgende bronnen voor meer informatie over ondersteuning voor functiebeheer in Spring Boot en App Configuration: