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 również zarządzają cyklami życia flag funkcji w tle. Na przykład biblioteki odświeżą stany flagi pamięci podręcznej lub gwarantują, że stan flagi będzie niezmienny podczas wywołania żądania. Ponadto biblioteka Spring Boot oferuje integrację, 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.

Niniejszy samouczek zawiera informacje na temat wykonywania następujących czynności:

  • Dodaj flagi funkcji w kluczowych częściach aplikacji, aby kontrolować dostępność funkcji.
  • Integracja z 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 flag i od razu wprowadzać te zmiany w aplikacji. App Configuration zapewnia scentralizowane miejsce do organizowania i kontrolowania wszystkich flag funkcji za pośrednictwem dedykowanego interfejsu użytkownika portalu. 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 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.8.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 używanego do oceny, czy stan funkcji jest włączony (czyli gdy jej 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 plik 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 do ustawień flagi funkcji. W poprzednim przykładzie przedstawiono trzy flagi funkcji z ich 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 to konfigurowalny filtr. 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 środowisku Spring Boot można 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-awykonać 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

Możesz użyć flag funkcji do przekierowywania 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ą, zawiera ona wszystkie szczegółowe informacje na temat sposobu działania biblioteki spring cloud Azure App Configuration. Aby uzyskać więcej informacji na temat obsługi zarządzania funkcjami w rozwiązaniu Spring Boot i App Configuration, zobacz następujące zasoby: