Esercizio - Creare un'applicazione Spring Boot che usa Spring Data Redis

Completato

In questa unità viene creata un'applicazione Spring Boot che usa Spring Data Redis per archiviare e recuperare i dati dalla cache di Azure per Redis. È possibile creare l'applicazione, ad eccezione della connessione finale alla cache di Azure per Redis, mentre si attende che l'istanza della cache di Azure per Redis completi la distribuzione.

Creare il progetto Spring Boot

Per creare il progetto Spring Boot, eseguire la riga di comando Spring Initializr seguente:

curl https://start.spring.io/starter.tgz -d type=maven-project -d dependencies=web,data-redis -d baseDir=spring-redis-application -d bootVersion=2.4.1.RELEASE -d javaVersion=1.8 | tar -xzvf -

Nota

Il comando usa i componenti Spring Web e Spring Data Redis. Spring Data Redis usa il driver Lettuce Redis, che è anche possibile usare per attività più avanzate.

Aggiungere il codice Spring per gestire i dati

  1. Nel progetto Spring Boot, accanto alla classe DemoApplication, aggiungere un oggetto di dominio Todo come indicato di seguito:

    package com.example.demo;
    
    import org.springframework.data.annotation.Id;
    import org.springframework.data.redis.core.RedisHash;
    
    import java.io.Serializable;
    
    @RedisHash("Todo")
    public class Todo implements Serializable {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        private Long id;
    
        private String description;
    
        private String details;
    
        private boolean done;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        public String getDetails() {
            return details;
        }
    
        public void setDetails(String details) {
            this.details = details;
        }
    
        public boolean isDone() {
            return done;
        }
    
        public void setDone(boolean done) {
            this.done = done;
        }
    }
    
  2. Creare un repository Spring Data Redis denominato TodoRepository per gestire questa raccolta, come indicato di seguito:

    package com.example.demo;
    
    import org.springframework.data.repository.CrudRepository;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface TodoRepository extends CrudRepository<Todo, String> {
    
    }
    
  3. Aggiungere un controller Spring MVC denominato TodoController, come indicato di seguito:

     package com.example.demo;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("/")
    public class TodoController {
    
        private final TodoRepository todoRepository;
    
        public TodoController(TodoRepository todoRepository) {
            this.todoRepository = todoRepository;
        }
    
        @PostMapping("/")
        @ResponseStatus(HttpStatus.CREATED)
        public Todo createTodo(@RequestBody Todo todo) {
            return todoRepository.save(todo);
        }
    
        @GetMapping("/")
        public Iterable<Todo> findAllTodos() {
            return todoRepository.findAll();
        }
    }
    

Ottenere le chiavi di sicurezza della cache di Azure per Redis

  1. Eseguire il comando seguente per verificare se l'istanza della cache di Azure per Redis è pronta per l'uso.

    az redis show --name $AZ_REDIS_NAME --resource-group $AZ_RESOURCE_GROUP
    

    Il comando restituisce i dati JSON che contengono un attributo provisioningState. Quando provisioningState ha il valore Succeeded, l'istanza della cache di Azure per Redis è completamente disponibile.

    Suggerimento

    Se si dispone dell'utilità jq, è possibile usare la riga di comando singola seguente per verificare la conformità:

    az redis show --name $AZ_REDIS_NAME --resource-group $AZ_RESOURCE_GROUP | jq '.provisioningState'
    
  2. Quando l'istanza della cache di Azure per Redis è pronta, eseguire il comando seguente per recuperare le chiavi di sicurezza:

    az redis list-keys \
        --resource-group $AZ_RESOURCE_GROUP \
        --name $AZ_REDIS_NAME
    

    Copiare il valore primaryKey dall'output da usare nel passaggio successivo.

Configurare Spring Boot per connettersi alla cache di Azure per Redis

Aprire il file di configurazione src/main/resources/application.properties nell’applicazione e aggiungere le proprietà seguenti. Sostituire il segnaposto <redisName> con il nome dell'istanza Redis e sostituire il segnaposto <redisPrimaryKey> con il valore primaryKey ottenuto dal passaggio precedente.

spring.redis.host=<redisName>.redis.cache.windows.net
spring.redis.password=<redisPrimaryKey>
spring.redis.port=6380
spring.redis.ssl=true

Testare l'applicazione in locale

  1. Eseguire l'applicazione Spring Boot eseguendo l'eseguibile DemoApplication nell'ambiente di sviluppo o eseguendo il plug-in Spring Boot Maven come indicato di seguito:

    ./mvnw spring-boot:run
    
  2. Quando l'applicazione è in esecuzione, archiviare alcuni dati in Redis usando il seguente comando:

    curl -d '{"description":"a description", "details":"some details"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:8080
    
  3. Ora recuperare i dati da Redis:

    curl http://127.0.0.1:8080
    

Passiamo all'unità successiva per apprendere come usare la cache di Azure per Redis per archiviare i dati di sessione HTTP tramite Spring Session.