Share via


Självstudie: Använda funktionsflaggor i en Spring Boot-app

Biblioteken för Spring Boot Core-funktionshantering har stöd för implementering av funktionsflaggor i ett Spring Boot-program. Med de här biblioteken kan du deklarativt lägga till funktionsflaggor i koden.

Funktionshanteringsbiblioteken hanterar även funktionsflaggans livscykel i bakgrunden. Till exempel uppdaterar biblioteken och cachelagrade flaggtillstånd, eller garanterar att ett flaggtillstånd är oföränderligt under ett begärandeanrop. Dessutom erbjuder Spring Boot-biblioteket integreringar, inklusive MVC-kontrollantåtgärder, vägar och mellanprogram.

Snabbstarten Lägga till funktionsflaggor i en Spring Boot-app visar flera sätt att lägga till funktionsflaggor i ett Spring Boot-program. I den här självstudien beskrivs dessa metoder mer detaljerat.

I den här självstudien får du lära dig hur man:

  • Lägg till funktionsflaggor i viktiga delar av programmet för att styra funktionstillgängligheten.
  • Integrera med App Configuration när du använder det för att hantera funktionsflaggor.

Konfigurera funktionshantering

Spring Boot-funktionshanteraren FeatureManager hämtar funktionsflaggor från ramverkets inbyggda konfigurationssystem. Därför kan du definiera programmets funktionsflaggor genom att använda valfri konfigurationskälla som Spring Boot stöder, inklusive den lokala bootstrap.yml-filen eller miljövariablerna. FeatureManager beroendeinmatning. Du kan registrera funktionshanteringstjänster med hjälp av standardkonventioner:

private FeatureManager featureManager;

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

Vi rekommenderar att du behåller funktionsflaggor utanför programmet och hanterar dem separat. På så sätt kan du när som helst ändra flaggtillstånd och låta ändringarna börja gälla i programmet direkt. App Configuration är en central plats för att organisera och kontrollera alla dina funktionsflaggor via ett dedikerat portalgränssnitt. App Configuration levererar också flaggorna till ditt program direkt via sina Spring Boot-klientbibliotek.

Det enklaste sättet att ansluta Spring Boot-programmet till App Configuration är via konfigurationsprovidern:

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

Deklaration av funktionsflagga

Varje funktionsflagga har två delar: ett namn och en lista med ett eller flera filter som används för att utvärdera om en funktions tillstånd är aktiverat (det vill säga när dess värde är True). Ett filter definierar ett användningsfall för när en funktion ska aktiveras.

När en funktionsflagga har flera filter bläddras filterlistan i ordning tills ett av filtren bestämmer att funktionen ska aktiveras. Då är funktionsflaggan aktiverad och eventuella återstående filterresultat hoppas över. Om inget filter anger att funktionen ska vara aktiverad är funktionsflaggan inaktiverad.

Funktionshanteraren stöder application.yml som konfigurationskälla för funktionsflaggor. I följande exempel visas hur du konfigurerar funktionsflaggor i en YAML-fil:

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

Enligt konventionen används avsnittet i feature-management det här YML-dokumentet för inställningar för funktionsflagga. I föregående exempel visas tre funktionsflaggor med deras filter definierade i egenskapen EnabledFor :

  • feature-a är .
  • feature-b är av.
  • feature-c anger ett filter med namnet PercentageFilter med en parameters egenskap. PercentageFilter är ett konfigurerbart filter. I det här exemplet PercentageFilter anger en sannolikhet på 50 procent för feature-c flaggan som ska vara .

Funktionsflaggakontroller

Det grundläggande mönstret för funktionshantering är att först kontrollera om en funktionsflagga är inställd på på. I så fall kör funktionshanteraren de åtgärder som funktionen innehåller. Exempel:

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

Beroendeinmatning

I Spring Boot kan du komma åt funktionshanteraren FeatureManager via beroendeinmatning:

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

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

Kontrollantåtgärder

I MVC-kontrollanter använder @FeatureGate du attributet för att kontrollera om en specifik åtgärd är aktiverad. Följande Index åtgärd måste feature-a vara innan den kan köras:

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

När en MVC-styrenhet eller åtgärd blockeras på grund av att kontrollfunktionsflaggan är avstängd anropas ett registrerat DisabledFeaturesHandler gränssnitt. DisabledFeaturesHandler Standardgränssnittet returnerar statuskoden 404 till klienten utan svarstext.

MVC-filter

Du kan konfigurera MVC-filter så att de aktiveras baserat på tillståndet för en funktionsflagga. Följande kod lägger till ett MVC-filter med namnet FeatureFlagFilter. Det här filtret utlöses endast i MVC-pipelinen om feature-a det är aktiverat.

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

Vägar

Du kan använda funktionsflaggor för att omdirigera vägar. Följande kod omdirigerar en användare från feature-a är aktiverad:

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

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

Nästa steg

I den här självstudien har du lärt dig hur du implementerar funktionsflaggor i Spring Boot-programmet med hjälp av biblioteken spring-cloud-azure-feature-management-web . Mer information finns i referensdokumentationen om hur Spring Cloud Azure App Configuration-biblioteket fungerar. Mer information om stöd för funktionshantering i Spring Boot och App Configuration finns i följande resurser: