Esercitazione: Usare i flag di funzionalità in un'app Spring Boot
Le librerie di gestione delle funzionalità di base di Spring Boot offrono supporto per l'implementazione dei flag di funzionalità in un'applicazione Spring Boot. Queste librerie consentono di aggiungere flag di funzionalità al codice in modo dichiarativo.
Le librerie di gestione delle funzionalità gestiscono anche i cicli di vita dei flag di funzionalità in background. Ad esempio, le librerie aggiornano e memorizzano nella cache gli stati del flag o garantiscono lo stato immutabile di un flag durante una chiamata di richiesta. La libreria Spring Boot offre anche integrazioni, tra cui azioni del controller MVC, route e middleware.
La guida di avvio rapido Aggiungere flag di funzionalità a un'app Spring Boot illustra diversi modi per aggiungere flag di funzionalità in un'applicazione Spring Boot. Questa esercitazione illustra questi metodi più dettagliatamente.
In questa esercitazione apprenderai a:
- Aggiungere i flag di funzionalità nelle parti chiave dell'applicazione per controllare la disponibilità delle funzionalità.
- Eseguire l'integrazione con Configurazione app quando viene usato per gestire i flag di funzionalità.
Configurare la gestione delle funzionalità
Lo strumento di gestione delle funzionalità di Spring Boot FeatureManager
ottiene i flag di funzionalità dal sistema di configurazione nativo del framework. Di conseguenza, è possibile definire i flag di funzionalità dell'applicazione usando qualsiasi origine di configurazione supportata da Spring Boot, ad esempio il file locale bootstrap.yml o le variabili di ambiente. FeatureManager
si basa sull'inserimento delle dipendenze. È possibile registrare i servizi di gestione di funzionalità usando le convenzioni standard:
private FeatureManager featureManager;
public HelloController(FeatureManager featureManager) {
this.featureManager = featureManager;
}
È consigliabile mantenere i flag di funzionalità all'esterno dell'applicazione e gestirli separatamente. In questo modo è possibile modificare gli stati dei flag in qualsiasi momento e applicare immediatamente tali modifiche nell'applicazione. Configurazione app offre una posizione centralizzata per organizzare e controllare tutti i flag di funzionalità tramite un'interfaccia utente del portale dedicata. Configurazione app fornisce anche i flag direttamente all'applicazione tramite le relative librerie client Spring Boot.
Il modo più semplice per connettere l'applicazione Spring Boot a Configurazione app consiste nell'usare il provider di configurazione:
<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>
Dichiarazione del flag di funzionalità
Ogni flag di funzionalità è costituito da due parti: un nome e un elenco di uno o più filtri che consentono di valutare se lo stato di una funzionalità è attivo (ovvero, quando il relativo valore è True
). Un filtro definisce un caso d'uso per il quale deve essere attivata una funzionalità.
Quando un flag di funzionalità include più filtri, l'elenco dei filtri viene scorso nell'ordine fino a quando uno dei filtri non determina che la funzionalità deve essere abilitata. A questo punto, il flag di funzionalità è attivo e i risultati del filtro rimanenti vengono ignorati. Se nessun filtro indica che deve essere abilitata la funzionalità, il flag di funzionalità viene disattivato.
Lo strumento di gestione delle funzionalità supporta application.yml come origine di configurazione per i flag di funzionalità. L'esempio seguente illustra come configurare i flag di funzionalità in un file YAML:
feature-management:
feature-a: true
feature-b: false
feature-c:
enabled-for:
-
name: PercentageFilter
parameters:
Value: 50
Per convenzione, la sezione feature-management
di questo documento YML viene usata per le impostazioni dei flag di funzionalità. L'esempio precedente mostra tre flag di funzionalità con i relativi filtri definiti nella proprietà EnabledFor
:
feature-a
è attivo.feature-b
è disattivato.feature-c
specifica un filtro denominatoPercentageFilter
con una proprietàparameters
.PercentageFilter
è un filtro configurabile. In questo esempioPercentageFilter
specifica una probabilità del 50% che il flagfeature-c
sia attivo.
Controlli dei flag di funzionalità
Il modello di base di gestione delle funzionalità consiste prima di tutto nel controllare se un flag di funzionalità è impostato su attivo. In tal caso, la gestione delle funzionalità esegue le azioni contenute nella funzionalità. Ad esempio:
private FeatureManager featureManager;
...
if (featureManager.isEnabledAsync("feature-a").block()) {
// Run the following code
}
Inserimento delle dipendenze
In Spring Boot è possibile accedere allo strumento di gestione delle funzionalità FeatureManager
tramite l'inserimento delle dipendenze:
@Controller
@ConfigurationProperties("controller")
public class HomeController {
private FeatureManager featureManager;
public HomeController(FeatureManager featureManager) {
this.featureManager = featureManager;
}
}
Azioni del controller
Nei controller MVC è possibile usare l'attributo @FeatureGate
per controllare se un'azione specifica è abilitata. Per poter eseguire l'azione Index
seguente, il flagfeature-a
deve essere attivo:
@GetMapping("/")
@FeatureGate(feature = "feature-a")
public String index(Model model) {
...
}
Quando un controller o un'azione MVC viene bloccato perché il flag di funzionalità di controllo è disattivato, viene chiamata un'interfaccia DisabledFeaturesHandler
registrata. L'interfaccia DisabledFeaturesHandler
predefinita restituisce un codice di stato 404 al client senza alcun corpo della risposta.
Filtri MVC
È possibile configurare i filtri MVC in modo da attivarli in base allo stato di un flag di funzionalità. Il codice seguente aggiunge un filtro MVC denominato FeatureFlagFilter
. Questo filtro viene attivato all'interno della pipeline MVC solo se il flag feature-a
è attivato.
@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);
}
}
Route
È possibile usare i flag di funzionalità per reindirizzare le route. Il codice seguente abiliterà il reindirizzamento di un utente da feature-a
:
@GetMapping("/redirect")
@FeatureGate(feature = "feature-a", fallback = "/getOldFeature")
public String getNewFeature() {
// Some New Code
}
@GetMapping("/getOldFeature")
public String getOldFeature() {
// Some New Code
}
Passaggi successivi
In questa esercitazione si è appreso come implementare i flag di funzionalità in un'applicazione Spring Boot usando le librerie spring-cloud-azure-feature-management-web
. Per altre domande, vedere la documentazione di riferimento. La documentazione di riferimento contiene tutti i dettagli sul funzionamento della libreria spring cloud app Azure configuration. Per altre informazioni sul supporto della gestione delle funzionalità in Spring Boot e Configurazione app, vedere le risorse seguenti: