Compartir a través de


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

La biblioteca cliente de Java Spring de App Configuration admite la actualización de la configuración a petición sin provocar el reinicio de una aplicación. 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 le muestra cómo puede implementar las actualizaciones de configuración dinámica en el código mediante una actualización de inserción. Se basa en la aplicación que se introdujo en los inicios rápidos. Antes de continuar, termine Creación de una aplicación de Java Spring con Azure App Configuration.

Para realizar los pasos de este tutorial, puede usar cualquier editor de código. Visual Studio Code es una excelente opción que está 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
  • Configurar la aplicación de 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 suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Configuración de la actualización de inserción

  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>5.18.0</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. Configure la implementación de Maven en App Service de manera que la aplicación se pueda implementar en Azure App Service mediante Maven.

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

    Use DefaultAzureCredential para autenticarse en el almacén de App Configuration. Siga las instrucciones para asignar la 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.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 agregue la configuración de arranque, mediante la creación de un archivo spring.factories en el directorio resources/META-INF y agregue las siguientes líneas y la actualización de com.example.MyApplication con el nombre de su 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 modificado es de 30 segundos.

Nota

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

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

Al crease los webhooks de Event Grid deben validarse. Puede realizar la validación siguiendo esta guíao iniciando la aplicación con la biblioteca web de Spring de Azure App Configuration ya configurada, lo cual registrará 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 símbolo del sistema de Windows, ejecute el siguiente comando y reinícielo para que se aplique el cambio:

    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 Azure Portal 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 los campos Event Subscription (Suscripción de eventos) y System Topic (Tema del sistema). De forma predeterminada, se establecen los tipos de eventos clave-valor modificados y eliminados; la razón 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 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, la verifica 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 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 la configuración de 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 más información, consulte Documentación de Azure Service Bus 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 Azure Portal 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 Value
    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 Azure Portal y después 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 la configuración desde App Configuration. Puede encontrar más preguntas en la documentación de referencia, que contiene todos los detalles sobre cómo funciona la biblioteca de Azure App Configuration de Spring Cloud. Para obtener información sobre cómo usar una identidad administrada de Azure para simplificar el acceso a App Configuration, vaya al siguiente tutorial.