Tutorial: Verwenden von Featureflags in einer Spring Boot-App
Die Spring Boot Core-Featureverwaltungsbibliotheken bieten Unterstützung für die Implementierung von Featureflags in einer Spring Boot-Anwendung. Dank dieser Bibliotheken können Sie Ihrem Code Featureflags auf deklarative Weise hinzufügen.
Die Featureverwaltungsbibliotheken verwalten darüber hinaus Featureflag-Lebenszyklen im Hintergrund. Die Bibliotheken können Flagzustände aktualisieren und zwischenspeichern, garantieren, dass ein Flagzustand während eines Anforderungsaufrufs unveränderlich ist, und Ähnliches. Darüber hinaus bietet die Spring Boot-Bibliothek Integrationen, einschließlich MVC-Controlleraktionen, Routen und Middleware.
Unter Schnellstart: Hinzufügen von Featureflags zu einer Spring Boot-App werden mehrere Methoden gezeigt, mit denen Sie Featureflags in einer Spring Boot-Anwendung hinzufügen können. Diese Methoden werden im vorliegenden Tutorial näher erläutert.
In diesem Tutorial lernen Sie Folgendes:
- Hinzufügen von Featureflags in wichtigen Teilen Ihrer Anwendung, um die Verfügbarkeit von Features zu steuern
- Integrieren in App Configuration, wenn Sie damit Featureflags verwalten
Einrichten der Featureverwaltung
Der Spring Boot-Feature-Manager FeatureManager
ruft Featureflags aus dem nativen Konfigurationssystem des Frameworks ab. Dadurch können Sie die Featureflags Ihrer Anwendung mit einer beliebigen, von Spring Boot unterstützten Konfigurationsquelle konfigurieren – unter anderem mit der lokalen Datei bootstrap.yml oder mit Umgebungsvariablen. FeatureManager
basiert auf der Abhängigkeitsinjektion. Die Featureverwaltungsdienste können unter Verwendung von Standardkonventionen registriert werden:
private FeatureManager featureManager;
public HelloController(FeatureManager featureManager) {
this.featureManager = featureManager;
}
Featureflags sollten sich außerhalb der Anwendung befinden und separat verwaltet werden. Dadurch können Sie Flagzustände jederzeit ändern, und die Änderungen werden in der Anwendung sofort wirksam. Mit App Configuration können Sie alle Ihre Featureflags über eine dedizierte Portalbenutzeroberfläche an einem zentralen Ort organisieren und steuern. App Configuration übermittelt darüber hinaus die Flags über seine Spring Boot-Clientbibliotheken direkt an Ihre Anwendung.
Die Verbindung zwischen Ihrer Spring Boot-Anwendung und App Configuration lässt sich am einfachsten über den Konfigurationsanbieter herstellen:
<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>
Featureflagdeklaration
Jedes Featureflag besteht aus zwei Teilen: einem Namen und einer Filterliste, anhand der ausgewertet wird, ob ein Feature aktiviert ist (der Wert also True
lautet). Ein Filter definiert einen Anwendungsfall für die Aktivierung eines Features.
Verfügt ein Featureflag über mehrere Filter, wird die Filterliste in der angegebenen Reihenfolge durchlaufen, bis einer der Filter angibt, dass das Feature aktiviert werden soll. Daraufhin ist das Featureflag aktiviert, und alle weiteren Filterergebnisse werden übersprungen. Falls durch keinen Filter angegeben wird, dass das Feature aktiviert werden soll, ist das Featureflag deaktiviert.
Der Feature-Manager unterstützt application.yml als Konfigurationsquelle für Featureflags. Das folgende Beispiel zeigt die Einrichtung von Featureflags in einer YAML-Datei:
feature-management:
feature-a: true
feature-b: false
feature-c:
enabled-for:
-
name: PercentageFilter
parameters:
Value: 50
Der Abschnitt feature-management
dieses YML-Dokuments wird konventionsgemäß für Featureflageinstellungen verwendet. Das vorherige Beispiel enthält drei Featureflags, deren Filter in der Eigenschaft EnabledFor
definiert sind:
feature-a
ist aktiviert.feature-b
ist deaktiviert.feature-c
gibt einen Filter namensPercentageFilter
mit einer Eigenschaft vom Typparameters
an.PercentageFilter
ist ein konfigurierbarer Filter. In diesem Beispiel gibtPercentageFilter
an, dass das Flagfeature-c
mit einer Wahrscheinlichkeit von 50 Prozent aktiviert ist.
Überprüfen von Featureflags
Bei der Featureverwaltung wird grundsätzlich zunächst geprüft, ob ein Featureflag aktiviert ist. Ist dies der Fall, führt der Feature-Manager die im Feature enthaltenen Aktionen aus. Beispiel:
private FeatureManager featureManager;
...
if (featureManager.isEnabledAsync("feature-a").block()) {
// Run the following code
}
Abhängigkeitsinjektion
In Spring Boot kann auf den Feature-Manager FeatureManager
mittels Abhängigkeitsinjektion zugegriffen werden:
@Controller
@ConfigurationProperties("controller")
public class HomeController {
private FeatureManager featureManager;
public HomeController(FeatureManager featureManager) {
this.featureManager = featureManager;
}
}
Controlleraktionen
In MVC-Controllern steuern Sie mithilfe eines Attributs vom Typ @FeatureGate
, ob eine spezifische Aktion aktiviert wird. Für die folgende Aktion Index
muss feature-a
aktiviert sein, damit sie ausgeführt werden kann:
@GetMapping("/")
@FeatureGate(feature = "feature-a")
public String index(Model model) {
...
}
Ist ein MVC-Controller oder eine Aktion blockiert, weil das steuernde Featureflag deaktiviert ist, wird eine registrierte Schnittstelle (DisabledFeaturesHandler
) aufgerufen. Die Standardschnittstelle DisabledFeaturesHandler
gibt den Statuscode 404 ohne Antworttext an den Client zurück.
MVC-Filter
Sie können MVC-Filter so einrichten, dass sie abhängig vom Zustand eines Featureflags aktiviert werden. Im folgenden Code wird ein MVC-Filter namens FeatureFlagFilter
hinzugefügt. Dieser Filter wird innerhalb der MVC-Pipeline nur ausgelöst, wenn feature-a
aktiviert ist.
@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);
}
}
Routen
Sie können Featureflags zum Umleiten von Routen verwenden. Mit dem folgenden Code wird ein Benutzer von feature-a
umgeleitet:
@GetMapping("/redirect")
@FeatureGate(feature = "feature-a", fallback = "/getOldFeature")
public String getNewFeature() {
// Some New Code
}
@GetMapping("/getOldFeature")
public String getOldFeature() {
// Some New Code
}
Nächste Schritte
In diesem Tutorial haben Sie gelernt, wie Sie Featureflags in Ihrer Spring Boot-Anwendung unter Verwendung der Bibliotheken vom Typ spring-cloud-azure-feature-management-web
implementieren. Weitere Fragen finden Sie in der Referenzdokumentation. Sie enthält alle Details darüber, wie die Spring Cloud Azure App Configuration-Bibliothek funktioniert. Weitere Informationen zur Unterstützung der Featureverwaltung in Spring Boot und App Configuration finden Sie in den folgenden Ressourcen: