Självstudie: Använda funktionsflaggor i en Spring Boot-app
Spring Boot Core-funktionshanteringsbiblioteken 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 inte kan ändras under ett begärandeanrop. Dessutom erbjuder Spring Boot-biblioteket integreringar, inklusive MVC-kontrollantåtgärder, vägar och mellanprogram.
Snabbstarten Lägg 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 lär du dig att:
- Lägg till funktionsflaggor i viktiga delar av programmet för att styra funktionstillgängligheten.
- Integrera med App Configuration när du använder den för att hantera funktionsflaggor.
Konfigurera funktionshantering
Spring Boot-funktionshanteraren FeatureManager
hämtar funktionsflaggor från ramverkets interna konfigurationssystem. Därför kan du definiera programmets funktionsflaggor genom att använda valfri konfigurationskälla som Stöds av Spring Boot, inklusive lokala bootstrap.yml-fil - eller miljövariabler. 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 har funktionsflaggor utanför programmet och hanterar dem separat. På så sätt kan du ändra flaggtillstånd när som helst och låta ändringarna börja gälla i programmet direkt. AppKonfiguration ä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.18.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Deklaration av funktionsflagga
Varje funktionsflagga har två delar: ett namn och en lista över 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 fastställer 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 sina filter definierade i egenskapen EnabledFor
:
feature-a
är på.feature-b
är av.feature-c
anger ett filter med namnetPercentageFilter
med enparameters
egenskap.PercentageFilter
är ett konfigurerbart filter. I det här exempletPercentageFilter
anger du 50 procents sannolikhet förfeature-c
att flaggan ska vara på.
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. Till 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-styrenheter använder @FeatureGate
du attributet för att styra om en specifik åtgärd är aktiverad. Följande Index
åtgärd måste feature-a
vara på 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 den kontrollerande funktionsflaggan är avstängd anropas ett registrerat DisabledFeaturesHandler
gränssnitt. DisabledFeaturesHandler
Standardgrä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
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 ditt Spring Boot-program med hjälp av biblioteken spring-cloud-azure-feature-management-web
. Mer information finns i referensdokumentationen. Referensdokumentationen innehåller all information 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: