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
orefreshConfigurations
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
- Una suscripción a Azure: cree una cuenta gratuita
- Un kit de desarrollo de Java (JDK) admitido, versión 11.
- Apache Maven, versión 3.0 o posterior.
- Un almacén de Azure App Configuration existente.
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
- 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>
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
Vaya al directorio
resources
de la aplicación, abrabootstrap.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 directorioresources/META-INF
y agregue las siguientes líneas y la actualización decom.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.
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.
Actualice el elemento
pom.xml
, enconfiguration
deazure-webapp-maven-plugin
agregue<appSettings> <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString> </appSettings>
Ejecute el siguiente comando para compilar la aplicación de consola:
mvn package
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
Abra el recurso App Configuration en Azure Portal y seleccione
+ Event Subscription
en el panelEvents
.Escriba un nombre para los campos
Event Subscription
(Suscripción de eventos) ySystem 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.Seleccione
Endpoint Type
comoWeb Hook
ySelect an endpoint
.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
Seleccione
Create
para crear la suscripción de eventos. Cuando se seleccionaCreate
, 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.Seleccione
Event Subscriptions
en el panelEvents
para validar que la suscripción se creó correctamente.
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
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
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 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.
- Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
- En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
- En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
- Seleccione Eliminar grupo de recursos.
- 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.