Självstudie: Använda funktionsflaggor i en Spring Boot app
De Spring Boot Core-biblioteken för 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 också livscykeln för funktionsflaggor i bakgrunden. Biblioteken kan till exempel uppdatera och cachelagra flaggtillstånd, eller garantera att ett flaggtillstånd inte kan ändras under ett begärandeanrop. Dessutom erbjuder Spring Boot integreringar, inklusive MVC-kontrollantåtgärder, vägar och mellanprogram.
Snabbstarten Lägg till funktionsflaggor Spring Boot en app visar flera sätt att lägga till funktionsflaggor i ett Spring Boot program. I den här självstudien förklaras dessa metoder i detalj.
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 kontrollera funktionstillgänglighet.
- Integrera med App Configuration när du använder den för att hantera funktionsflaggor.
Konfigurera funktionshantering
Den Spring Boot funktionshanteraren FeatureManager hämtar funktionsflaggor från ramverket interna konfigurationssystem. Därför kan du definiera programmets funktionsflaggor med hjälp av valfri konfigurationskälla som Spring Boot stöder, inklusive den lokala bootstrap.yml-filen eller miljövariablerna. FeatureManager förlitar sig på beroendeinjektion. Du kan registrera funktionshanteringstjänsterna 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 ändra flagg tillstånd när som helst och få dessa ändringar att gälla i programmet direkt. App Configuration en central plats för att organisera och kontrollera alla dina funktionsflaggor via ett dedikerat portalgränssnitt. App Configuration även flaggor till ditt program direkt via dess Spring Boot klientbibliotek.
Det enklaste sättet att ansluta Spring Boot till App Configuration är via konfigurationsprovidern:
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-cloud-feature-management-web</artifactId>
<version>2.0.0</version>
</dependency>
Anteckning
Om du behöver stöd för en äldre version av Spring Boot se vårt gamla bibliotek.
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 på (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 på, 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 ställer in funktionsflaggor i en YAML-fil:
feature-management:
feature-set:
feature-a: true
feature-b: false
feature-c:
enabled-for:
-
name: Percentage
parameters:
value: 50
Som konvention används feature-management avsnittet i det här YML-dokumentet för inställningar för funktionsflaggan. I föregående exempel visas tre funktionsflaggor med deras filter definierade i EnabledFor egenskapen :
feature-aär på.feature-bär av.feature-canger ett filter med namnetPercentagemed enparametersegenskap.Percentageär ett konfigurerbart filter. I det här exempletPercentageanger en sannolikhet på 50 procent för att flaggan ska varafeature-cpå.
Funktionsflaggan kontrollerar
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. Ett exempel:
private FeatureManager featureManager;
...
if (featureManager.isEnabledAsync("feature-a").block()) {
// Run the following code
}
Beroendeinmatning
I Spring Boot kan du komma åt funktionshanteraren via FeatureManager beroendeinjektion:
@Controller
@ConfigurationProperties("controller")
public class HomeController {
private FeatureManager featureManager;
public HomeController(FeatureManager featureManager) {
this.featureManager = featureManager;
}
}
Kontrollantåtgärder
I MVC-styrenheter använder du @FeatureGate attributet för att styra om en viss åtgärd är aktiverad. Följande åtgärd Index måste vara på feature-a innan den kan köras:
@GetMapping("/")
@FeatureGate(feature = "feature-a")
public String index(Model model) {
...
}
När en MVC-kontrollant eller åtgärd blockeras eftersom kontrollfunktionsflaggan är av anropas ett IDisabledFeaturesHandler registrerat gränssnitt. IDisabledFeaturesHandlerStandardgränssnittet returnerar en 404-statuskod 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 ä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.isEnabledAsync("feature-a").block()) {
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 med hjälp av azure-spring-cloud-feature-management-web biblioteken. Mer information om stöd för funktionshantering i Spring Boot och App Configuration finns i följande resurser: