Compartilhar via


Tutorial: Usar a configuração dinâmica com atualização por push em um aplicativo Java Spring

A biblioteca de clientes Java Spring de Configuração de Aplicativos oferece suporte à atualização da configuração sob demanda, sem causar a reinicialização do aplicativo. Um aplicativo pode ser configurado para detectar alterações na Configuração de Aplicativos usando uma das abordagens a seguir ou ambas.

  • Modelo de pesquisa: O modelo de pesquisa é o comportamento padrão que usa pesquisas para detectar alterações na configuração. Quando o valor armazenado em cache de uma configuração expira, a próxima chamada para AppConfigurationRefresh's refreshConfigurations envia uma solicitação ao servidor para verificar se a configuração foi alterada e obtém a configuração atualizada, se necessário.

  • Modo de push: usa eventos da Configuração de Aplicativos para detectar alterações na configuração. Depois que a Configuração de Aplicativos é configurada para enviar eventos de alteração de valor de chave com a Grade de Eventos, com um webhook, o aplicativo pode usar esses eventos para otimizar o número total de solicitações necessárias para manter a configuração atualizada.

Este tutorial mostra como você pode implementar atualizações de configuração dinâmica no código usando a atualização por push. Ele se baseia no aplicativo introduzido nos inícios rápidos. Antes de continuar, primeiro conclua Criar um aplicativo Java Spring com a Configuração de Aplicativos.

Você pode usar qualquer editor de código para executar as etapas deste tutorial. Visual Studio Code é uma opção excelente que está disponível nas plataformas Windows, macOS e Linux.

Neste tutorial, você aprenderá como:

  • Configurar uma assinatura para enviar eventos de alteração de configuração da Configuração de Aplicativos para um webhook
  • Implantar um aplicativo Spring Boot no Serviço de Aplicativo
  • Configure seu aplicativo Java Spring para atualizar a configuração dele em resposta a alterações na Configuração de Aplicativos.
  • Consuma a configuração mais recente em seu aplicativo.

Pré-requisitos

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Configurar a atualização por push

  1. Abra pom.xml e atualize o arquivo com as seguintes dependências.
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-appconfiguration-config-web</artifactId>
</dependency>

<!-- Adds the Ability to Push Refresh -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</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>
  1. Configure a Implantação do Serviço de Aplicativo Maven para que o aplicativo possa ser implantado no Serviço de Aplicativo do Azure com o Maven.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
    
  2. Navegue até o diretório resources do seu aplicativo e abra bootstrap.properties e configure a Atualização por Push da Configuração de Aplicativos do Azure. Se o arquivo não existir, crie-o. Adicione a seguinte linha ao arquivo.

    Você usa a autenticação DefaultAzureCredential no repositório de Configuração de Aplicativos. Siga as instruções para atribuir à credencial a função Leitor de Dados de Configuração de Aplicativo. Certifique-se de permitir tempo suficiente para a permissão se propagar antes de executar seu aplicativo. Crie um novo arquivo chamado AppConfigCredential.java e adicione as seguintes linhas:

    spring.cloud.azure.appconfiguration.stores[0].endpoint= ${APP_CONFIGURATION_ENDPOINT}
    spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled= true
    spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 30d
    spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key= sentinel
    spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.name= myToken
    spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.secret= myTokenSecret
    
    management.endpoints.web.exposure.include= appconfiguration-refresh
    

    Além disso, você precisa adicionar o seguinte código ao seu projeto, a menos que queira usar a Identidade Gerenciada:

    import org.springframework.stereotype.Component;
    
    import com.azure.data.appconfiguration.ConfigurationClientBuilder;
    import com.azure.identity.DefaultAzureCredentialBuilder;
    import com.azure.spring.cloud.appconfiguration.config.ConfigurationClientCustomizer;
    
    @Component
    public class AppConfigCredential implements ConfigurationClientCustomizer {
    
        @Override
        public void customize(ConfigurationClientBuilder builder, String endpoint) {
            builder.credential(new DefaultAzureCredentialBuilder().build());
        }
    }
    

    E adicione a configuração Bootstrap Configuration, criando o arquivo spring.factories no diretório resources/META-INF e adicione as seguintes linhas e atualizando com.example.MyApplication com o nome do seu aplicativo e pacote:

    org.springframework.cloud.bootstrap.BootstrapConfiguration=\
    com.example.MyApplication
    

Um atraso aleatório é adicionado antes que o valor em cache seja marcado como sujo para reduzir a limitação potencial. O atraso máximo padrão antes que o valor em cache seja marcado como sujo é de 30 segundos.

Observação

O nome do token primário deve ser armazenado na Configuração de Aplicativos como uma chave e, em seguida, o segredo do token primário deve ser armazenado como uma referência do Key Vault da Configuração de Aplicativos para aumentar a segurança.

Compilar e executar o aplicativo no serviço de aplicativo

Os webhooks da Grade de Eventos requerem validação na criação. Você pode validar seguindo esse guia ou iniciando seu aplicativo com a Biblioteca Web Spring de Configuração de Aplicativos do Azure já configurada, que registra seu aplicativo para você. Para usar uma assinatura de evento, siga as etapas nas próximas duas seções.

  1. Defina uma variável de ambiente.

    Defina a variável de ambiente chamada APP_CONFIGURATION_ENDPOINT como o ponto de extremidade do seu repositório de configuração de aplicativos, encontrado na Visão geral do seu repositório no portal do Azure.

    Se você usar o prompt de comando do Windows, execute o comando a seguir e reinicie o prompt de comando para permitir que a alteração entre em vigor:

    setx APP_CONFIGURATION_ENDPOINT "endpoint-of-your-app-configuration-store"
    

    Se você usar o PowerShell, execute o seguinte comando:

    $Env:APP_CONFIGURATION_ENDPOINT = "endpoint-of-your-app-configuration-store"
    

    Se você usa macOS ou Linux, execute o comando a seguir:

    export APP_CONFIGURATION_ENDPOINT='<endpoint-of-your-app-configuration-store>'
    

    Reinicie o prompt de comando para permitir que a alteração entre em vigor. Imprima o valor da variável de ambiente para validar que ele está definido corretamente.


  2. Atualizar seu pom.xml na azure-webapp-maven-plugin de adicionar configuration

    <appSettings>
      <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString>
    </appSettings>
    
  3. Execute o seguinte comando para compilar o aplicativo de console:

     mvn package
    
  4. Depois que a construção for concluída com êxito, execute o seguinte comando para executar o aplicativo localmente:

    mvn azure-webapp:deploy
    

Configurar uma assinatura de evento

  1. Abra o recurso configuração de aplicativo no portal do Azure e selecione + Event Subscription no painel Events.

    O painel de eventos tem uma opção para criar novas assinaturas.

  2. Insira um nome para o Event Subscription e o System Topic. Por padrão, os tipos de evento Chave-valor modificado e Chave-valor excluído são definidos. O motivo pode ser alterado usando a guia Filtros para escolher os motivos exatos pelos quais um evento push é enviado.

    Os eventos exigem um nome, um tópico e filtros.

  3. Selecione Endpoint Type como Web Hook e, em seguida, Select an endpoint.

    Selecionar um ponto de extremidade cria uma nova folha para inserir o URI desse ponto.

  4. O ponto de extremidade é o URI do aplicativo + "/actuator/appconfiguration-refresh?{your-token-name}={your-token-secret}". Por exemplo, https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret

  5. Selecione Create para criar a assinatura do evento. Quando Create é selecionado, uma solicitação de registro para o Web Hook é enviada ao seu aplicativo. A solicitação é recebida pela biblioteca de cliente de Configuração de Aplicativos do Azure, verificada e retorna uma resposta válida.

  6. Selecione Event Subscriptions no painel Events para validar se a assinatura foi criada com sucesso.

    O webhook aparece em uma tabela na parte inferior da página.

Observação

Ao assinar alterações de configuração, um ou mais filtros podem ser usados para reduzir o número de eventos enviados ao aplicativo. Elas podem ser configuradas como filtros de assinatura da Grade de Eventos. Por exemplo, um filtro de assinatura pode ser usado para assinar somente eventos de alterações em uma chave que começa com uma cadeia de caracteres específica.

Observação

Se você tiver várias instâncias do aplicativo em execução, poderá usar o ponto de extremidade appconfiguration-refresh-bus, que requer a configuração do Barramento de Serviço do Azure, que por sua vez é usado para enviar uma mensagem a todas as instâncias do aplicativo para atualizar a configuração. Isso será útil se você tiver várias instâncias do aplicativo em execução e quiser garantir que todas as instâncias sejam atualizadas com a configuração mais recente. Esse ponto de extremidade não está disponível, a menos que você tenha spring-cloud-bus como dependência com ele configurado. Para obter mais informações, veja documentação do Azure Service Bus Spring Cloud Bus. A conexão do barramento de serviço só precisa ser configurada e a biblioteca de Configuração de Aplicativos do Azure manipulará o envio e o recebimento das mensagens.

Verificar e testar o aplicativo

  1. Depois que o aplicativo estiver em execução, use curl para testar o aplicativo, por exemplo:

    curl -X GET https://my-azure-webapp.azurewebsites.net
    
  2. Abra o portal do Azure e acesse o recurso de Configuração de Aplicativos associado ao seu aplicativo. Selecione Gerenciador de configurações em Operações e atualize os valores das seguintes chaves.

    Chave Valor
    application/config.message Hello - Updated
  3. Atualize a página do navegador para ver a nova mensagem exibida.

Limpar os recursos

Se não deseja continuar usando os recursos criados neste artigo, exclua o grupo de recursos que você criou aqui para evitar encargos.

Importante

A exclusão de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos contidos nele são excluídos permanentemente. Não exclua acidentalmente grupo de recursos ou recursos incorretos. Se tiver criado os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que você deseja manter, exclua cada um individualmente do respectivo painel em vez de excluir o grupo de recursos.

  1. Entre no portal do Azure e selecione Grupos de recursos.
  2. Na caixa Filtrar por nome..., digite o nome do seu grupo de recursos.
  3. Na lista de resultados, selecione o nome do grupo de recursos para conferir uma visão geral.
  4. Selecione Excluir grupo de recursos.
  5. Você receberá uma solicitação para confirmar a exclusão do grupo de recursos. Insira o nome do grupo de recursos para confirmar e selecione Excluir.

Após alguns instantes, o grupo de recursos e todos os recursos dele são excluídos.

Próximas etapas

Neste tutorial, você habilitou seu aplicativo Java para atualizar dinamicamente as definições de configuração da Configuração de Aplicativos. Para obter mais perguntas, confira a documentação de referência, ela tem todos os detalhes sobre como funciona a biblioteca de Configuração de Aplicativos do Azure do Spring Cloud. Para saber como usar uma identidade gerenciada pelo Azure para simplificar o acesso à Configuração de Aplicativos, passe para o próximo tutorial.