Руководство. Использование флагов функций в приложении Spring Boot

Библиотеки управления функциями Spring Boot обеспечивают поддержку реализации флагов функций в приложении Spring Boot. Эти библиотеки позволяют декларативно добавлять флаги функций в код.

Библиотеки управления функциями также управляют жизненным циклом флагов функций в фоновом режиме. Например, библиотеки отвечают за обновление и кэширование состояний флагов или гарантируют неизменность состояния флага во время вызова запроса. Кроме того, библиотека Spring Boot предоставляет интеграции, включая действия контроллера MVC, маршруты и ПО промежуточного слоя.

В кратком руководстве по добавлению флагов функций в приложение Spring Boot описано несколько использующихся при этом методов. В нашем руководстве такие методы рассматриваются более подробно.

В этом учебнике рассматривается следующее.

  • Добавить флаги функций в ключевых частях приложения для управления доступностью функций.
  • Как выполнить интеграцию с Конфигурацией приложений при использовании этой службы для управления флагами функций.

Настройка управления функциями

Диспетчер функций Spring Boot FeatureManager возвращает флаги функций из собственной системы конфигурации платформы. Таким образом, вы можете определить флаги функций приложения, используя любой источник конфигурации, поддерживаемый Spring Boot, включая локальный файл bootstrap.yml или переменные среды. FeatureManager полагается на внедрение зависимостей. Вы можете зарегистрировать службы управления функциями с помощью стандартных соглашений:

private FeatureManager featureManager;

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

Рекомендуем хранить флаги функций вне приложения и управлять ими отдельно. Так вы можете изменять состояния флагов в любое время и немедленно применять эти изменения в приложении. Конфигурация приложений — это централизованное расположение для организации всех флагов функций и управления такими флагами с помощью выделенного пользовательского интерфейса портала. Конфигурация приложений также предоставляет приложению флаги непосредственно через клиентские библиотеки Spring Boot.

Самый простой способ подключить приложение Spring Boot к Конфигурации приложений — использовать поставщика конфигураций.

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

Объявление флага функции

Флаг каждого компонента состоит из двух частей: имени и списка, включающего один или несколько фильтров, которые используются, чтобы понять, имеет ли компонент состояние включен (то есть, его значение равно ). Фильтр определяет вариант использования, при котором должна быть включена функция.

Если флаг функции имеет несколько фильтров, список фильтров проходится по порядку, пока один из фильтров не определит, что функция должна быть включена. На этом этапе флаг функции включен, и все остальные результаты фильтрации пропускаются. Если фильтр не указывает, что эта функция должна быть включена, флаг функции остается отключенным.

Диспетчер функций поддерживает application.yml в качестве источника конфигурации для флагов функций. В следующем примере показано, как настроить флаги функций в YAML-файле:

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

В соответствии с соглашением раздел feature-management этого YAML-документа используется для параметров флагов функций. Предыдущий пример показывает три флага функций с фильтрами, определенными в свойстве EnabledFor:

  • Флаг feature-aвключен.
  • Флаг feature-bотключен.
  • feature-c указывает фильтр с именем PercentageFilter и свойством parameters. PercentageFilter — это настраиваемый фильтр. В этом примере PercentageFilter задает 50-процентную вероятность того, что флаг feature-c может быть включен.

Проверка флага функции

В базовой схеме управления функциями сначала проверяется, включен ли флаг функции. Если это так, диспетчер функций выполняет действия, содержащиеся в функции. Пример:

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

Внедрение зависимостей

В Spring Boot доступ к диспетчеру функций FeatureManager можно получить с помощью внедрения зависимостей:

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

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

Действия контроллера

В контроллерах MVC с помощью атрибута @FeatureGate можно управлять объектом включения: определенное действие. Для выполнения указанного ниже действия Index требуется, чтобы флаг feature-a был включен.

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

Когда контроллер MVC или действие блокируется из-за того, что флаг функции контроллера отключен, вызывается зарегистрированный интерфейс DisabledFeaturesHandler. Интерфейс DisabledFeaturesHandler по умолчанию возвращает клиенту код состояния 404 без текста ответа.

Фильтры MVC

Фильтры MVC можно настроить таким образом, чтобы они активировались в зависимости от состояния флага функции. С помощью приведенного ниже кода добавляется фильтр MVC с именем FeatureFlagFilter. Этот фильтр активируется в пределах конвейера MVC, только если флаг feature-a включен.

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

Маршруты

Флаги функции можно использовать для перенаправления маршрутов. Следующий код перенаправит пользователя из feature-a.

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

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

Дальнейшие действия

Из этого руководства вы узнали, как с помощью библиотек spring-cloud-azure-feature-management-web реализовать флаги функций в приложении Spring Boot. Если возникнут дополнительные вопросы, см. справочную документацию, в ней подробно описан принцип работы библиотеки Spring Cloud для Конфигурации приложений Azure. Дополнительные сведения о поддержке управления функциями в Spring Boot и Конфигурации приложений см. в следующих ресурсах: