练习 - 创建使用 Spring Data Redis 的 Spring Boot 应用程序
在本单元中,创建一个 Spring Boot 应用程序,该应用程序使用 Spring Data Redis 在 Azure Cache for Redis 中存储和检索数据。 可以在等待 Azure Cache for Redis 实例完成部署时创建应用程序,但与 Azure Cache for Redis 的最终连接除外。
创建 Spring Boot 项目
要创建 Spring Boot 项目,请运行以下 Spring Initializr 命令行:
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 -
注意
该命令使用 Spring Web
和 Spring Data Redis
组件。 Spring Data Redis
使用 Lettuce Redis 驱动程序,还可将该驱动程序用于更高级的任务。
添加 Spring 代码以管理数据
在 Spring Boot 项目中的 DemoApplication 类旁边,添加一个 Todo 域对象,如下所示:
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; } }
创建名为 TodoRepository 的 Spring Data Redis 存储库来管理此集合,如下所示:
package com.example.demo; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @Repository public interface TodoRepository extends CrudRepository<Todo, String> { }
添加名为 TodoController 的 Spring MVC 控制器,如下所示:
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(); } }
获取 Azure Cache for Redis 安全密钥
运行以下命令,以检查 Azure Cache for Redis 实例是否已可供使用。
az redis show --name $AZ_REDIS_NAME --resource-group $AZ_RESOURCE_GROUP
该命令返回包含
provisioningState
属性的 JSON 数据。 如果provisioningState
的值为Succeeded
,则表示 Azure Cache for Redis 实例完全可用。提示
如果有 jq 实用工具,则可以使用以下单个命令行来检查准备情况:
az redis show --name $AZ_REDIS_NAME --resource-group $AZ_RESOURCE_GROUP | jq '.provisioningState'
Azure Cache for Redis 实例准备就绪后,运行以下命令来检索其安全密钥:
az redis list-keys \ --resource-group $AZ_RESOURCE_GROUP \ --name $AZ_REDIS_NAME
从输出中复制
primaryKey
值以在下一步中使用。
配置 Spring Boot 以连接到 Azure Cache for Redis
在应用程序中打开 src/main/resources/application.properties 配置文件,并添加以下属性。 将 <redisName>
占位符替换为 Redis 实例名称,并将 <redisPrimaryKey>
占位符替换为从上一步获取的 primaryKey
值。
spring.redis.host=<redisName>.redis.cache.windows.net
spring.redis.password=<redisPrimaryKey>
spring.redis.port=6380
spring.redis.ssl=true
在本地测试应用程序
通过在开发环境中运行可执行文件 DemoApplication 或通过运行 Spring Boot Maven 插件来运行 Spring Boot 应用程序,如下所示:
./mvnw spring-boot:run
在应用程序运行时,使用以下命令将一些数据存储在 Redis 中:
curl -d '{"description":"a description", "details":"some details"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:8080
现在从 Redis 中检索这些数据:
curl http://127.0.0.1:8080
转到下一单元,了解如何使用 Azure Cache for Redis 通过 Spring Session 存储 HTTP 会话数据。