Udostępnij za pośrednictwem


Samouczek: używanie flag funkcji w aplikacji Spring Boot

Biblioteki zarządzania funkcjami platformy Spring Boot Core zapewniają obsługę implementowania flag funkcji w aplikacji Spring Boot. Te biblioteki umożliwiają deklaratywne dodawanie flag funkcji do kodu.

Biblioteki zarządzania funkcjami zarządzają również cyklami życia flag funkcji w tle. Na przykład biblioteki odświeżą i buforują stany flagi lub gwarantują, że stan flagi będzie niezmienny podczas wywołania żądania. Ponadto biblioteka Spring Boot oferuje integracje, w tym akcje kontrolera MVC, trasy i oprogramowanie pośredniczące.

W przewodniku Szybki start dodawanie flag funkcji do aplikacji Spring Boot przedstawiono kilka sposobów dodawania flag funkcji w aplikacji Spring Boot. W tym samouczku opisano te metody bardziej szczegółowo.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Dodaj flagi funkcji w kluczowych częściach aplikacji, aby kontrolować dostępność funkcji.
  • Integruj się z usługą App Configuration, gdy używasz jej do zarządzania flagami funkcji.

Konfigurowanie zarządzania funkcjami

Menedżer FeatureManager funkcji Spring Boot pobiera flagi funkcji z natywnego systemu konfiguracji platformy. W związku z tym można zdefiniować flagi funkcji aplikacji przy użyciu dowolnego źródła konfiguracji obsługiwanego przez platformę Spring Boot, w tym lokalnego pliku bootstrap.yml lub zmiennych środowiskowych. FeatureManager polega na wstrzyknięciu zależności. Usługi zarządzania funkcjami można zarejestrować przy użyciu standardowych konwencji:

private FeatureManager featureManager;

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

Zalecamy, aby flagi funkcji były przechowywane poza aplikacją i zarządzać nimi oddzielnie. Dzięki temu można w dowolnym momencie modyfikować stany flagi i od razu wprowadzać te zmiany w aplikacji. Usługa App Configuration zapewnia scentralizowane miejsce do organizowania i kontrolowania wszystkich flag funkcji za pośrednictwem dedykowanego interfejsu użytkownika portalu. Usługa App Configuration dostarcza również flagi do aplikacji bezpośrednio za pośrednictwem bibliotek klienckich platformy Spring Boot.

Najprostszym sposobem połączenia aplikacji Spring Boot z usługą App Configuration jest dostawca konfiguracji:

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

Deklaracja flagi funkcji

Każda flaga funkcji ma dwie części: nazwę i listę co najmniej jednego filtru, które są używane do oceny, czy stan funkcji jest włączony (czyli gdy jego wartość to True). Filtr definiuje przypadek użycia, gdy funkcja powinna być włączona.

Gdy flaga funkcji ma wiele filtrów, lista filtrów jest przechodzina w kolejności, dopóki jeden z filtrów nie określi, że funkcja powinna zostać włączona. W tym momencie flaga funkcji jest włączona i wszystkie pozostałe wyniki filtru są pomijane. Jeśli żaden filtr nie wskazuje, że funkcja powinna być włączona, flaga funkcji jest wyłączona.

Menedżer funkcji obsługuje application.yml jako źródło konfiguracji flag funkcji. W poniższym przykładzie pokazano, jak skonfigurować flagi funkcji w pliku YAML:

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

Zgodnie z konwencją feature-management sekcja tego dokumentu YML jest używana na potrzeby ustawień flag funkcji. W poprzednim przykładzie pokazano trzy flagi funkcji z filtrami zdefiniowanymi we EnabledFor właściwości :

  • feature-a jest włączona.
  • feature-b jest wyłączona.
  • feature-c określa filtr o nazwie PercentageFilter z właściwością parameters . PercentageFilter jest konfigurowalnym filtrem. W tym przykładzie PercentageFilter określa 50-procentowe prawdopodobieństwo, że flaga feature-c ma być włączona.

Kontrole flag funkcji

Podstawowym wzorcem zarządzania funkcjami jest najpierw sprawdzenie, czy flaga funkcji jest włączona. Jeśli tak, menedżer funkcji uruchamia akcje, które zawiera funkcja. Na przykład:

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

Wstrzykiwanie zależności

W rozwiązaniu Spring Boot możesz uzyskać dostęp do menedżera FeatureManager funkcji za pomocą wstrzykiwania zależności:

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

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

Akcje kontrolera

W kontrolerach MVC atrybut służy @FeatureGate do kontrolowania, czy jest włączona określona akcja. Aby można było uruchomić polecenie , należy feature-a wykonać następującą Index akcję:

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

Gdy kontroler MVC lub akcja jest blokowana, ponieważ flaga funkcji sterowania jest wyłączona, wywoływany jest zarejestrowany DisabledFeaturesHandler interfejs. Interfejs domyślny DisabledFeaturesHandler zwraca kod stanu 404 do klienta bez treści odpowiedzi.

Filtry MVC

Filtry MVC można skonfigurować tak, aby były aktywowane na podstawie stanu flagi funkcji. Poniższy kod dodaje filtr MVC o nazwie FeatureFlagFilter. Ten filtr jest wyzwalany w potoku MVC tylko wtedy, gdy feature-a jest włączony.

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

Trasy

Flagi funkcji umożliwiają przekierowywanie tras. Następujący kod przekierowuje użytkownika z feature-a jest włączony:

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

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

Następne kroki

W tym samouczku przedstawiono sposób implementowania flag funkcji w aplikacji Spring Boot przy użyciu spring-cloud-azure-feature-management-web bibliotek. Aby uzyskać więcej pytań, zobacz dokumentację referencyjną. Dokumentacja referencyjna zawiera wszystkie szczegóły dotyczące działania biblioteki konfiguracji spring cloud aplikacja systemu Azure. Aby uzyskać więcej informacji na temat obsługi zarządzania funkcjami w rozwiązaniu Spring Boot i usłudze App Configuration, zobacz następujące zasoby: