Tutorial: Uso de la configuración dinámica mediante la actualización por push en una aplicación Spring de Java

La biblioteca cliente de App Configuration Java Spring admite la actualización de la configuración a petición sin hacer que una aplicación se reinicie. Se puede configurar una aplicación para que detecte cambios en App Configuration mediante uno de los dos métodos siguientes o ambos.

  • Modelo de sondeo: el Modelo de sondeo es el comportamiento predeterminado que usa el sondeo para detectar cambios en la configuración. Una vez que el valor almacenado en caché de una configuración expira, la siguiente llamada a AppConfigurationRefresh o refreshConfigurations envía una solicitud al servidor para comprobar si la configuración ha cambiado y extrae la configuración actualizada si es necesario.

  • Modo de inserción: este modo utiliza eventos de App Configuration para detectar los cambios en la configuración. Una vez que App Configuration está configurado para enviar eventos de cambio de valor de clave a Event Grid con un webhook, la aplicación puede usar estos eventos para optimizar el número total de solicitudes necesarias para mantener la configuración actualizada.

Este tutorial muestra cómo puede implementar actualizaciones dinámicas de configuración en el código mediante una actualización push. Se basa en la aplicación que se introdujo en los inicios rápidos. Antes de continuar, finalice Crear una aplicación Java Spring con App Configuration primero.

Para realizar los pasos de este tutorial, puede usar cualquier editor de código. Visual Studio Code es una excelente opción disponible en las plataformas Windows, macOS y Linux.

En este tutorial, aprenderá a:

  • Configurar una suscripción para enviar eventos de cambio de configuración desde App Configuration a un webhook.
  • Implementar una aplicación de Spring Boot en App Service
  • Configure la aplicación Java Spring para actualizar su configuración en respuesta a los cambios en App Configuration.
  • Consuma en la aplicación la configuración más reciente.

Prerrequisitos

Si no tiene una cuenta de Azure, cree una cuenta free antes de comenzar.

Configurar Actualización Push

  1. Abra pom.xml y actualice el archivo con las dependencias siguientes.
<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>7.0.0</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. Configure Maven App Service Deployment para que la aplicación se pueda implementar en Azure App Service a través de Maven.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
    
  2. Vaya al directorio resources de la aplicación, abra application.properties y configure la actualización de inserciones de Azure App Configuration. Si el archivo no existe, créelo. Agregue la siguiente línea al archivo.

    Usa DefaultAzureCredential para autenticarte en el almacén de App Configuration. Siga las instrucciones para asignar tu credencial al rol Lector de datos de App Configuration. Asegúrese de dejar tiempo suficiente para que el permiso se propague antes de ejecutar la aplicación. Cree un nuevo archivo denominado AppConfigCredential.java y agregue las siguientes líneas:

    spring.config.import=azureAppConfiguration
    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
    

    Además, debe agregar el código siguiente al proyecto, a menos que quiera usar la identidad administrada:

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

    Y añade la configuración Bootstrap creando un archivo spring.factories en el directorio resources/META-INF, añade las siguientes líneas y actualiza com.example.MyApplication con el nombre de tu aplicación y el paquete:

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

Se agrega un retraso aleatorio antes de que el valor almacenado en caché se marque como modificado para reducir la posible limitación. El retraso máximo predeterminado antes de que el valor en caché se marque como caducado es de 30 segundos.

Nota

El nombre del token principal debe almacenarse en App Configuration como clave y, a continuación, el secreto de token principal debe almacenarse como una referencia de App Configuration Key Vault para mayor seguridad.

Compilación y ejecución de la aplicación en App Service

Al crease los webhooks de Event Grid deben validarse. Puede validar si sigue esta guide o iniciando la aplicación con Azure App Configuration Biblioteca web de Spring ya configurada, que registra la aplicación automáticamente. Para usar una suscripción a eventos, siga los pasos de las dos secciones siguientes.

  1. Establezca una variable de entorno.

    Establezca la variable de entorno denominada APP_CONFIGURATION_ENDPOINT en el punto de conexión del almacén de App Configuration que se encuentra en la Información general del almacén en Azure Portal.

    Si usa el indicador de comando de Windows, ejecute el siguiente comando y reinicie el indicador de comando para permitir que el cambio entre en vigor.

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

    Si usa PowerShell, ejecute el siguiente comando:

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

    Si usa macOS o Linux, ejecute el siguiente comando:

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

    Reinicie el símbolo del sistema para permitir que el cambio surta efecto. Imprima el valor de la variable de entorno para comprobar que se ha establecido correctamente.


  2. Actualice el elemento pom.xml, en configuration de azure-webapp-maven-plugin agregue

    <appSettings>
      <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString>
    </appSettings>
    
  3. Ejecute el siguiente comando para compilar la aplicación de consola:

     mvn package
    
  4. Una vez que la compilación se haya realizado correctamente, ejecute el siguiente comando para ejecutar la aplicación localmente:

    mvn azure-webapp:deploy
    

Configuración de una suscripción a eventos

  1. Abra el recurso App Configuration en el portal de Azure y seleccione + Event Subscription en el panel Events.

    El panel de eventos tiene una opción para crear nuevas suscripciones.

  2. Escriba un nombre para el Event Subscription y el System Topic. De forma predeterminada, se establecen los tipos de eventos clave-valor modificados y eliminados; pero se puede cambiar además del uso de la pestaña Filtros para elegir los motivos exactos por los que se envía un evento de inserción.

    Los eventos requieren un nombre, un tema y filtros.

  3. Seleccione Endpoint Type como Web Hook y luego seleccione Select an endpoint.

    Al seleccionar Punto de conexión, se crea una hoja para escribir el URI del punto de conexión.

  4. El punto de conexión es el URI de la aplicación + "/actuator/appconfiguration-refresh?{nombre-del-token}={secreto-del-token}". Por ejemplo: https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret

  5. Seleccione Create para crear la suscripción de eventos. Cuando se selecciona Create, se envía una solicitud de registro para el webhook a la aplicación. La biblioteca cliente de Azure App Configuration recibe la solicitud, se comprueba y devuelve una respuesta válida.

  6. Seleccione Event Subscriptions en el panel Events para validar que la suscripción se creó correctamente.

    El webhook se muestra en una tabla en la parte inferior de la página.

Nota

Al suscribirse a los cambios de configuración, se pueden usar uno o varios filtros para reducir el número de eventos que se envían a la aplicación. Estos se pueden configurar ya sea como filtros de suscripción de Event Grid. Por ejemplo, un filtro de suscripción se puede utilizar para suscribirse solo a eventos de cambios en una clave que empieza por una cadena específica.

Nota

Si tiene varias instancias de la aplicación en ejecución, puede usar el punto de conexión de appconfiguration-refresh-bus que requiere configurar Azure Service Bus, que se usa para enviar un mensaje a todas las instancias de la aplicación para actualizar su configuración. Esto resulta útil si tiene varias instancias de la aplicación en ejecución y quiere asegurarse de que todas las instancias se actualizan con la configuración más reciente. Este punto de conexión no está disponible a menos que tenga spring-cloud-bus como dependencia con él configurado. Para obtener más información, consulte Azure Service Bus documentación de Spring Cloud Bus. La conexión de Service Bus solo debe configurarse y la biblioteca de Azure App Configuration controlará el envío y recepción de los mensajes.

Comprobación y prueba de la aplicación

  1. Una vez que se está ejecutando la aplicación, puede usar curl para probarla, por ejemplo:

    curl -X GET https://my-azure-webapp.azurewebsites.net
    
  2. Abra el portal Azure y vaya al recurso de App Configuration asociado a la aplicación. Seleccione Explorador de configuración en Operaciones y actualice los valores de las claves siguientes:

    Clave Importancia
    application/config.message Hello: actualizado
  3. Actualice la página del explorador para ver el nuevo mensaje que se muestra.

Limpieza de recursos

Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.

  1. Inicie sesión en el portal Azure y seleccione Grupos de recursos.
  2. En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
  3. En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
  4. Seleccione Eliminar grupo de recursos.
  5. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.

Pasos siguientes

En este tutorial, ha habilitado la aplicación de Java para actualizar dinámicamente las opciones de configuración desde App Configuration. Para obtener más preguntas, consulte la documentación de referencia, tiene todos los detalles sobre cómo funciona la biblioteca de Spring Cloud Azure App Configuration. Para aprender a usar una identidad administrada Azure para simplificar el acceso a App Configuration, continúe con el siguiente tutorial.