Share via


Tutorial: Utilizar sinalizadores de funcionalidades numa aplicação Spring Boot

As bibliotecas de Gestão de Funcionalidades do Spring Boot Core fornecem suporte para a implementação de sinalizadores de funcionalidades numa aplicação Spring Boot. Estas bibliotecas permitem-lhe adicionar declarativamente sinalizadores de funcionalidades ao seu código.

As bibliotecas de Gestão de Funcionalidades também gerem ciclos de vida de sinalização de funcionalidades em segundo plano. Por exemplo, as bibliotecas atualizam e colocam os estados do sinalizador da cache ou garantem que um estado de sinalizador é imutável durante uma chamada de pedido. Além disso, a biblioteca do Spring Boot oferece integrações, incluindo ações, rotas e middleware do controlador MVC.

O Guia de Início Rápido Adicionar sinalizadores de funcionalidades a uma aplicação Spring Boot mostra várias formas de adicionar sinalizadores de funcionalidades numa aplicação Spring Boot. Este tutorial explica estes métodos mais detalhadamente.

Neste tutorial, vai aprender a:

  • Adicione sinalizadores de funcionalidades em partes principais da sua aplicação para controlar a disponibilidade das funcionalidades.
  • Integre com App Configuration quando estiver a utilizá-la para gerir sinalizadores de funcionalidades.

Configurar a gestão de funcionalidades

O gestor FeatureManager de funcionalidades do Spring Boot obtém sinalizadores de funcionalidades do sistema de configuração nativo da arquitetura. Como resultado, pode definir os sinalizadores de funcionalidades da sua aplicação através de qualquer origem de configuração suportada pelo Spring Boot, incluindo as variáveis de ambiente ou ficheiro bootstrap.yml locais. FeatureManager baseia-se na injeção de dependências. Pode registar os serviços de gestão de funcionalidades através de convenções padrão:

private FeatureManager featureManager;

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

Recomendamos que mantenha os sinalizadores de funcionalidades fora da aplicação e os faça em separado. Ao fazê-lo, pode modificar estados de sinalizador em qualquer altura e fazer com que essas alterações entrem em vigor na aplicação imediatamente. App Configuration fornece um local centralizado para organizar e controlar todos os sinalizadores de funcionalidades através de uma IU de portal dedicada. App Configuration também fornece os sinalizadores à sua aplicação diretamente através das respetivas bibliotecas de cliente do Spring Boot.

A forma mais fácil de ligar a aplicação Spring Boot ao App Configuration é através do fornecedor de configuração:

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

Declaração do sinalizador de funcionalidade

Cada sinalizador de funcionalidade tem duas partes: um nome e uma lista de um ou mais filtros que são utilizados para avaliar se o estado de uma funcionalidade está ativado (ou seja, quando o respetivo valor é True). Um filtro define um caso de utilização para quando uma funcionalidade deve ser ativada.

Quando um sinalizador de funcionalidade tem vários filtros, a lista de filtros é percorrida por ordem até que um dos filtros determine que a funcionalidade deve ser ativada. Nessa altura, o sinalizador de funcionalidade está ativado e os restantes resultados do filtro são ignorados. Se nenhum filtro indicar que a funcionalidade deve estar ativada, o sinalizador de funcionalidade está desativado.

O gestor de funcionalidades suporta application.yml como uma origem de configuração para sinalizadores de funcionalidades. O exemplo seguinte mostra como configurar sinalizadores de funcionalidades num ficheiro YAML:

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

Por convenção, a feature-management secção deste documento YML é utilizada para definições de sinalizador de funcionalidades. O exemplo anterior mostra três sinalizadores de funcionalidade com os respetivos filtros definidos na EnabledFor propriedade :

  • feature-a está ligado.
  • feature-b está desativado.
  • feature-c especifica um filtro com o nome PercentageFilter com uma parameters propriedade. PercentageFilter é um filtro configurável. Neste exemplo, PercentageFilter especifica uma probabilidade de 50 por cento para o feature-c sinalizador estar ativado.

Verificações de sinalizador de funcionalidades

O padrão básico da gestão de funcionalidades é verificar primeiro se um sinalizador de funcionalidade está definido como ativado. Se for o caso, o gestor de funcionalidades executa as ações que a funcionalidade contém. Por exemplo:

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

Injeção de dependência

No Spring Boot, pode aceder ao gestor FeatureManager de funcionalidades através da injeção de dependências:

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

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

Ações do controlador

Nos controladores MVC, utiliza o @FeatureGate atributo para controlar se uma ação específica está ativada. A ação seguinte Index tem feature-a de estar ativada antes de poder ser executada:

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

Quando um controlador ou ação MVC é bloqueado porque o sinalizador de funcionalidade de controlo está desativado, é chamada uma interface registada DisabledFeaturesHandler . A interface predefinida DisabledFeaturesHandler devolve um código de estado 404 ao cliente sem corpo de resposta.

Filtros MVC

Pode configurar filtros MVC para que sejam ativados com base no estado de um sinalizador de funcionalidade. O código seguinte adiciona um filtro MVC com o nome FeatureFlagFilter. Este filtro é acionado no pipeline MVC apenas se feature-a estiver ativado.

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

Rotas

Pode utilizar sinalizadores de funcionalidades para redirecionar rotas. O código seguinte irá redirecionar um utilizador a partir de feature-a está ativado:

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

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

Passos seguintes

Neste tutorial, aprendeu a implementar sinalizadores de funcionalidades na sua aplicação Spring Boot com as spring-cloud-azure-feature-management-web bibliotecas. Para obter mais perguntas, veja a documentação de referência, tem todos os detalhes sobre como funciona a biblioteca de Azure App Configuration do Spring Cloud. Para obter mais informações sobre o suporte de gestão de funcionalidades no Spring Boot e App Configuration, veja os seguintes recursos: