Guida pratica: Utilizzare la configurazione dinamica tramite aggiornamento automatico in un'app Spring Java

La libreria client di App Configuration per Java Spring supporta l'aggiornamento della configurazione a richiesta senza richiedere il riavvio di un'applicazione. Un'applicazione può essere configurata per rilevare le modifiche in Configurazione app usando uno o entrambi i due approcci seguenti.

  • Modello di polling: il modello di polling è il comportamento predefinito che usa il polling per rilevare le modifiche nella configurazione. Una volta scaduto il valore memorizzato nella cache di un'impostazione, la chiamata successiva a AppConfigurationRefreshinvia refreshConfigurations una richiesta al server per verificare se la configurazione è stata modificata ed esegue il pull della configurazione aggiornata, se necessario.

  • Modello Push: utilizza eventi di configurazione dell'app per rilevare le modifiche nella configurazione. Dopo aver configurato App Configuration per inviare eventi di modifica del valore della chiave con Event Grid, con un Web Hook, l'applicazione può utilizzare questi eventi per ottimizzare il numero totale di richieste necessarie per mantenere aggiornata la configurazione.

Questa esercitazione illustra come implementare gli aggiornamenti della configurazione dinamica nel codice usando l'aggiornamento push. Si basa sull'app presentata negli argomenti di avvio rapido. Prima di continuare, Creare un'app Java Spring con Configurazione app.

Per completare i passaggi riportati in questa esercitazione, è possibile usare qualsiasi editor di codice. Visual Studio Code è un'ottima opzione disponibile nelle piattaforme Windows, macOS e Linux.

In questa esercitazione apprenderai a:

  • Configurare una sottoscrizione per inviare eventi di modifica della configurazione da App Configuration a un Webhook
  • Distribuire applicazione Spring Boot in App Service
  • Configurare Java Spring per aggiornarne la configurazione in risposta alle modifiche in Configurazione app.
  • Utilizzare la configurazione più recente nell'applicazione.

Prerequisiti

Se non si ha un account Azure, creare un account free prima di iniziare.

Installazione dell'aggiornamento push

  1. Aprire pom.xml e aggiornare il file con le dipendenze seguenti.
<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. Configurare Maven App Service Deployment in modo che l'applicazione possa essere distribuita in Azure App Service tramite Maven.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
    
  2. Passare alla directory resources dell'app e aprire il file application.properties per configurare l'aggiornamento push di Azure App Configuration. Se il file non esiste, crearlo. Aggiungere al file la riga seguente.

    Usare DefaultAzureCredential per eseguire l'autenticazione nell'archivio di Configurazione app. Seguire le istruzioni per assegnare alle tue credenziali il ruolo Lettore dati Configurazione app. Assicurarsi di consentire tempo sufficiente per la propagazione dell'autorizzazione prima di eseguire l'applicazione. Creare un nuovo file denominato AppConfigCredential.java e aggiungere le righe seguenti:

    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
    

    È anche necessario aggiungere il codice seguente al progetto, a meno che non si voglia usare l'identità gestita:

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

    Aggiungere la configurazione Bootstrap creando il file spring.factories nella directory resources/META-INF e aggiungendo le righe seguenti aggiornando com.example.MyApplication con il nome e il pacchetto dell'applicazione.

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

Viene aggiunto un ritardo casuale prima che il valore memorizzato nella cache sia contrassegnato come invalidato per ridurre il potenziale rallentamento. Il ritardo massimo predefinito prima che il valore memorizzato nella cache sia contrassegnato come dirty è 30 secondi.

Nota

Il nome del token primario deve essere archiviato in Configurazione App come chiave, e il segreto del token primario deve essere archiviato come riferimento a Key Vault di Configurazione App per una maggiore sicurezza.

Compilare ed eseguire l'app nel servizio app

Gli web hook di Griglia di eventi richiedono la convalida durante la creazione. È possibile eseguire la convalida seguendo questa guide o avviando l'applicazione con Azure App Configuration Spring Web Library già configurata, che registra automaticamente l'applicazione. Per usare una sottoscrizione di eventi, seguire la procedura descritta nelle due sezioni successive.

  1. Impostare una variabile di ambiente.

    Impostare la variabile di ambiente denominata APP_CONFIGURATION_ENDPOINT sull'endpoint dell'archivio di Configurazione App indicato nell'area Panoramica dello store nel portale di Azure.

    Se si usa il prompt dei comandi Windows, eseguire il comando seguente e riavviare il prompt dei comandi per consentire l'applicazione della modifica:

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

    Se si usa PowerShell, eseguire il comando seguente:

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

    Se si usa macOS o Linux, eseguire il comando seguente:

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

    Riavviare il prompt dei comandi per rendere effettiva la modifica. Stampare il valore della variabile di ambiente per verificare che sia impostato correttamente.


  2. Aggiorna pom.xml nella sezione azure-webapp-maven-plugin di configuration

    <appSettings>
      <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString>
    </appSettings>
    
  3. Eseguire il comando seguente per compilare l'app console:

     mvn package
    
  4. Al termine della compilazione, eseguire questo comando per eseguire l'app Web in locale:

    mvn azure-webapp:deploy
    

Configurare una sottoscrizione di eventi

  1. Aprire la risorsa Configurazione app nel portale di Azure, quindi selezionare + Event Subscription nel riquadro Events.

    Il riquadro eventi include un'opzione per creare nuove sottoscrizioni.

  2. Immettere un nome per Event Subscription e System Topic. Per impostazione predefinita, vengono impostati i tipi di evento Key-Value modificati e Key-Value eliminati, il motivo può essere modificato insieme all'uso della scheda Filtri per scegliere i motivi esatti per cui viene inviato un evento push.

    Gli eventi richiedono un nome, un argomento e filtri.

  3. Seleziona Endpoint Type come Web Hook, seleziona Select an endpoint.

    Selezionando Endpoint si apre un nuovo blade per inserire l'URI dell'endpoint.

  4. L'endpoint è l'URI dell'applicazione + "/actuator/appconfiguration-refresh?{your-token-name}={your-token-secret}". Ad esempio, https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret

  5. Selezionare Create per creare la sottoscrizione all'evento. Quando Create è selezionata, all'applicazione viene inviata una richiesta di registrazione per Web Hook. La richiesta viene ricevuta dalla libreria client Azure App Configuration, verificata e restituisce una risposta valida.

  6. Selezionare Event Subscriptions nel Events riquadro per verificare che la sottoscrizione sia stata creata correttamente.

    Web Hook viene visualizzato in una tabella nella parte inferiore della pagina.

Nota

Quando si sottoscrive le modifiche alla configurazione, è possibile usare uno o più filtri per ridurre il numero di eventi inviati all'applicazione. Questi possono essere configurati come filtri di sottoscrizione di Event Grid. Ad esempio, un filtro di sottoscrizione può essere usato per sottoscrivere solo gli eventi per le modifiche in una chiave che inizia con una stringa specifica.

Nota

Se sono in esecuzione più istanze dell'applicazione, è possibile usare l'endpoint appconfiguration-refresh-bus che richiede la configurazione di Azure Service Bus, che viene usato per inviare un messaggio a tutte le istanze dell'applicazione per aggiornare la configurazione. Ciò è utile se si dispone di più istanze dell'applicazione in esecuzione e si vuole assicurarsi che tutte le istanze vengano aggiornate con la configurazione più recente. Questo endpoint non è disponibile a meno che spring-cloud-bus non sia configurato come dipendenza. Per altre informazioni, vedere Azure Service Bus documentazione di Spring Cloud Bus. La connessione al bus di servizio deve essere configurata solo e la libreria Azure App Configuration gestirà l'invio e la ricezione dei messaggi.

Verificare e testare l'applicazione

  1. Quando l'applicazione è in esecuzione, è possibile testarla usando curl, ad esempio:

    curl -X GET https://my-azure-webapp.azurewebsites.net
    
  2. Aprire il portale Azure portale e passare alla risorsa di Configurazione app associata all'applicazione. Selezionare Esplora configurazione in Operazioni e aggiornare i valori delle chiavi seguenti:

    Chiave valore
    application/config.message Hello - Aggiornato
  3. Aggiornare la pagina del browser per visualizzare il nuovo messaggio.

Pulire le risorse

Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.
  2. Nella casella Filtra per nome immettere il nome del gruppo di risorse.
  3. Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
  4. Selezionare Elimina gruppo di risorse.
  5. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.

Passaggi successivi

In questa esercitazione, hai abilitato la tua app Java ad aggiornare dinamicamente le impostazioni di configurazione da App Configuration. Per altre domande, vedere la documentazione reference contiene tutti i dettagli sul funzionamento della libreria spring cloud Azure App Configuration. Per scoprire come utilizzare un'identità gestita di Azure per semplificare l'accesso a App Configuration, continuare con l'esercitazione successiva.