Partilhar via


Tutorial: Usar sinalizadores de recursos em um aplicativo Spring Boot

As bibliotecas do Spring Boot Core Feature Management fornecem suporte para a implementação de sinalizadores de recursos em um aplicativo Spring Boot. Essas bibliotecas permitem que você adicione declarativamente sinalizadores de recursos ao seu código.

As bibliotecas de gerenciamento de recursos também gerenciam ciclos de vida de sinalizadores de recursos nos bastidores. Por exemplo, as bibliotecas atualizam e armazenam em cache estados de sinalização, ou garantem que um estado de bandeira seja imutável durante uma chamada de solicitação. Além disso, a biblioteca Spring Boot oferece integrações, incluindo ações do controlador MVC, rotas e middleware.

O Guia de início rápido Adicionar sinalizadores de recursos a um aplicativo Spring Boot mostra várias maneiras de adicionar sinalizadores de recursos em um aplicativo Spring Boot. Este tutorial explica esses métodos com mais detalhes.

Neste tutorial, irá aprender a:

  • Adicione sinalizadores de recursos em partes importantes do seu aplicativo para controlar a disponibilidade do recurso.
  • Integre com a Configuração do Aplicativo quando estiver usando-o para gerenciar sinalizadores de recursos.

Configurar o gerenciamento de recursos

O gerenciador FeatureManager de recursos do Spring Boot recebe sinalizadores de recursos do sistema de configuração nativo da estrutura. Como resultado, você pode definir os sinalizadores de recursos do seu aplicativo usando qualquer fonte de configuração suportada pelo Spring Boot, incluindo o arquivo bootstrap.yml local ou as variáveis de ambiente. FeatureManager depende da injeção de dependência. Você pode registrar os serviços de gerenciamento de recursos usando convenções padrão:

private FeatureManager featureManager;

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

Recomendamos que você mantenha sinalizadores de recursos fora do aplicativo e os gerencie separadamente. Isso permite que você modifique os estados de bandeira a qualquer momento e que essas alterações entrem em vigor no aplicativo imediatamente. A Configuração do Aplicativo fornece um local centralizado para organizar e controlar todos os seus sinalizadores de recursos por meio de uma interface do usuário do portal dedicada. A Configuração do Aplicativo também entrega os sinalizadores ao seu aplicativo diretamente por meio de suas bibliotecas de cliente do Spring Boot.

A maneira mais fácil de conectar seu aplicativo Spring Boot à Configuração do Aplicativo é através do provedor 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.18.0</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Declaração de sinalizador de recurso

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

Quando um sinalizador de recurso tem vários filtros, a lista de filtros é percorrida em ordem até que um dos filtros determine que o recurso deve ser habilitado. Nesse ponto, o sinalizador de recurso está ativado e todos os resultados restantes do filtro são ignorados. Se nenhum filtro indicar que o recurso deve ser habilitado, o sinalizador de recurso estará desativado.

O gerenciador de recursos suporta application.yml como uma fonte de configuração para sinalizadores de recursos. O exemplo a seguir mostra como configurar sinalizadores de recurso em um arquivo YAML:

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

Por convenção, a feature-management seção deste documento YML é usada para configurações de sinalizador de recurso. O exemplo anterior mostra três sinalizadores de recursos com seus filtros definidos na EnabledFor propriedade:

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

Verificações de sinalizadores de recursos

O padrão básico do gerenciamento de recursos é primeiro verificar se um sinalizador de recurso está definido como ativado. Em caso afirmativo, o gerenciador de recursos executa as ações que o recurso 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, você pode acessar o gerenciador FeatureManager de recursos por meio da injeção de dependência:

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

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

Ações do controlador

Em controladores MVC, você usa o @FeatureGate atributo para controlar se uma ação específica está habilitada. A seguinte Index ação requer feature-a 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 recurso de controle está desativado, uma interface registrada DisabledFeaturesHandler é chamada. A interface padrão DisabledFeaturesHandler retorna um código de status 404 para o cliente sem corpo de resposta.

Filtros MVC

Você pode configurar filtros MVC para que eles sejam ativados com base no estado de um sinalizador de recurso. O código a seguir adiciona um filtro MVC chamado FeatureFlagFilter. Esse filtro é acionado dentro do pipeline MVC somente se feature-a estiver habilitado.

@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

Você pode usar sinalizadores de recursos para redirecionar rotas. O código a seguir redirecionará um usuário de está habilitado feature-a :

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

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

Próximos passos

Neste tutorial, você aprendeu como implementar sinalizadores de recursos em seu aplicativo Spring Boot usando as spring-cloud-azure-feature-management-web bibliotecas. Para mais questões, consulte a documentação de referência. A documentação de referência tem todos os detalhes sobre como funciona a biblioteca de Configuração de Aplicativo do Azure do Spring Cloud. Para obter mais informações sobre o suporte ao gerenciamento de recursos no Spring Boot e na Configuração de Aplicativos, consulte os seguintes recursos: