Condividi tramite


Avvio rapido: Aggiungere flag di funzionalità a un'app Spring Boot

In questa guida di avvio rapido si incorpora Configurazione app di Azure in un'app Web Spring Boot per creare un'implementazione end-to-end di Gestione funzionalità. È possibile usare il servizio Configurazione app per archiviare tutti i flag di funzionalità in una posizione centralizzata e controllarne gli stati.

Le librerie di Gestione funzionalità di Spring Boot estendono il framework con il supporto completo per i flag di funzionalità. Queste librerie non includono dipendenze da alcuna libreria di Azure. Si integrano facilmente con Configurazione app tramite il provider di configurazione di Spring Boot.

Prerequisiti

Aggiungere un flag di funzionalità

Aggiungere un flag di funzionalità chiamato Beta all’archivio di Configurazione app e lasciare Etichetta e Descrizione con i relativi valori predefiniti. Per altre informazioni su come aggiungere flag di funzionalità a un archivio usando il portale di Azure o l’interfaccia della riga di comando, vedere Creare un flag di funzionalità.

Abilitare il flag di funzionalità denominato Beta

Compilare l'app Spring Boot

Per creare un nuovo progetto Spring Boot:

  1. Passare a Spring Initializr.

  2. Specificare le opzioni seguenti:

    • Generare un progetto Maven con Java.
    • Specificare Spring Boot versione 2.0 o successiva.
    • Specificare i nomi di Group (Gruppo) e Artifact (Artefatto) per l'applicazione. Questo articolo usa com.example e demo.
    • Aggiungere la dipendenza Spring Web.
  3. Dopo aver specificato le opzioni precedenti, selezionare Genera progetto. Quando richiesto, scaricare il progetto nel computer locale.

Aggiungere la gestione delle funzionalità

  1. Dopo l'estrazione dei file nel sistema locale, l'applicazione Spring Boot è pronta per la modifica. Individuare il file pom.xml nella directory radice dell'app.

  2. Aprire il file pom.xml in un editor di testo e aggiungere quanto segue all'elenco di <dependencies>:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-appconfiguration-config-web</artifactId>
</dependency>
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-feature-management-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-dependencies</artifactId>
        <version>6.0.0</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Note

  • È disponibile una libreria di gestione delle funzionalità non Web che non ha una dipendenza da spring-web. Per le differenze, vedere la documentazione di GitHub.

Connettersi a un archivio di Configurazione app

  1. Passare alla directory resources dell'app e aprire il file bootstrap.properties o bootstrap.yaml. Se il file non esiste, crearlo.

    È possibile connettersi all'archivio di Configurazione app usando Microsoft Entra ID (scelta consigliata) o una stringa di connessione.

    1. Aggiornare i file di configurazione.

      Se si usa un file di proprietà, usare il codice seguente:

      spring.config.import=azureAppConfiguration
      spring.cloud.azure.appconfiguration.stores[0].endpoint= ${APP_CONFIGURATION_ENDPOINT}
      spring.cloud.azure.appconfiguration.stores[0].feature-flags.enabled=true
      

      Se si usa un file yaml, usare il codice seguente:

      spring:
        config:
          import: azureAppConfiguration
        cloud:
          azure:
            appconfiguration:
              stores:
                  -
                  feature-flags:
                      enabled: true
                  endpoint: ${APP_CONFIGURATION_ENDPOINT}
      

      Usare DefaultAzureCredential per eseguire l'autenticazione nell'archivio di Configurazione app. Seguire le istruzioni per assegnare le credenziali al ruolo Lettore dati di Configurazione app. Assicurarsi di consentire tempo sufficiente per la propagazione dell'autorizzazione prima di eseguire l'applicazione.

    2. Aggiungere il codice seguente al progetto, a meno che non si voglia usare l'identità gestita. Creare un nuovo file denominato AppConfigCredential.java:

      import com.azure.data.appconfiguration.ConfigurationClientBuilder;
      import com.azure.identity.DefaultAzureCredentialBuilder;
      import com.azure.spring.cloud.appconfiguration.config.ConfigurationClientCustomizer;
      
      public class AppConfigCredential implements ConfigurationClientCustomizer {
      
          @Override
          public void customize(ConfigurationClientBuilder builder, String endpoint) {
              builder.credential(new DefaultAzureCredentialBuilder().build());
          }
      }
      
    3. Creare un nuovo file denominato MyConfiguration.java e aggiungere le righe seguenti:

      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      
      @Configuration
      public class MyConfiguration {
      
      
          @Bean
          public AppConfigCredential clientSetup() {
              return new AppConfigCredential();
          }
      
      }
      
    4. Aggiungere la configurazione di Bootstrap, creando il file spring.factories nella directory resources/META-INF e aggiungendo le righe seguenti e aggiornando com.example.MyConfiguration con il pacchetto della tua applicazione.

      org.springframework.cloud.bootstrap.BootstrapConfiguration=\
      com.example.MyConfiguration
      
  2. Creare un nuovo file Java denominato HelloController.java nella directory del pacchetto dell'app.

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    import com.azure.spring.cloud.feature.management.FeatureManager;
    
    
    @Controller
    public class HelloController {
    
        @Autowired
        private FeatureManager featureManager;
    
        @GetMapping("/welcome")
        public String mainWithParam(Model model) {
            model.addAttribute("Beta", featureManager.isEnabled("Beta"));
            return "welcome";
        }
    }
    
  3. Creare un nuovo file HTML denominato welcome.html nella directory templates dell'app.

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <title>Feature Management with Spring Cloud Azure</title>
    
        <link rel="stylesheet" href="/css/main.css">
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    
        <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
        <script src="https://unpkg.com/@popperjs/core@2"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
    
    </head>
    <body>
        <header>
        <!-- Fixed navbar -->
        <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
            <a class="navbar-brand" href="#">TestFeatureFlags</a>
            <button class="navbar-toggler" aria-expanded="false" aria-controls="navbarCollapse" aria-label="Toggle navigation" type="button" data-target="#navbarCollapse" data-toggle="collapse">
            <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarCollapse">
            <ul class="navbar-nav mr-auto">
                <li class="nav-item active">
                <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
                </li>
                <li class="nav-item" th:if="${Beta}">
                <a class="nav-link" href="#">Beta</a>
                </li>
                <li class="nav-item">
                <a class="nav-link" href="#">Privacy</a>
                </li>
            </ul>
            </div>
        </nav>
        </header>
        <div class="container body-content">
            <h1 class="mt-5">Welcome</h1>
            <p>Learn more about <a href="https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring/spring-cloud-azure-feature-management/README.md">Feature Management with Spring Cloud Azure</a></p>
    
        </div>
        <footer class="footer">
            <div class="container">
            <span class="text-muted">&copy; 2019 - Projects</span>
        </div>
    
        </footer>
    </body>
    </html>
    
    
  4. Creare una nuova cartella denominata CSS in static e al suo interno creare un nuovo file CSS denominato main.css.

    html {
     position: relative;
     min-height: 100%;
    }
    body {
     margin-bottom: 60px;
    }
    .footer {
     position: absolute;
     bottom: 0;
     width: 100%;
     height: 60px;
     line-height: 60px;
     background-color: #f5f5f5;
    }
    
    body > .container {
     padding: 60px 15px 0;
    }
    
    .footer > .container {
     padding-right: 15px;
     padding-left: 15px;
    }
    
    code {
     font-size: 80%;
    }
    

Compilare ed eseguire l'app in locale

  1. Impostare una variabile di ambiente.

    Impostare la variabile di ambiente denominata APP_CONFIGURATION_ENDPOINT sull'endpoint dell'archivio di Configurazione app disponibile in Panoramica dello store nel portale di Azure.

    Se si usa il prompt dei comandi di Windows, eseguire il comando seguente e riavviare il prompt per rendere effettiva la 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. Compilare l'applicazione Spring Boot con Maven ed eseguirla.

    mvn clean package
    mvn spring-boot:run
    
  3. Aprire una finestra del browser e passare all'URL: http://localhost:8080/welcome.

    Screenshot mostra una finestra del browser con un messaggio di benvenuto.

  4. Nel portale di Configurazione app selezionare Gestione funzionalità e modificare lo stato della chiave Beta in :

    Chiave State
    Versione Beta Attivato
  5. Aggiornare la pagina del browser per visualizzare le nuove impostazioni di configurazione.

    Screenshot mostra una finestra del browser con un messaggio di benvenuto e un collegamento Beta evidenziato.

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 guida di avvio rapido è stato creato un nuovo archivio di Configurazione app, che è stato usato per gestire le funzionalità in un'app Web Spring Boot con le librerie di Gestione funzionalità.