Spring认证指南:了解如何使用 Gemfire 的数据结构构建应用程序。(Spring中国教育管理中心)

在 Pivotal GemFire 中访问数据

本指南将引导您完成构建Apache Geode数据管理系统应用程序的过程。

你将建造什么

您将使用Spring Data for Apache Geode来存储和检索 POJO。

你需要什么

  • 约15分钟
  • 最喜欢的文本编辑器或 IDE
  • JDK 1.8或更高版本
  • Gradle 4+或Maven 3.2+
  • 您还可以将代码直接导入 IDE:
    • 弹簧工具套件 (STS)
    • IntelliJ IDEA

如何完成本指南

像大多数 Spring入门指南一样,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。

从头开始,请继续从 Spring Initializr 开始。

跳过基础知识,请执行以下操作:

  • 下载并解压本指南的源代码库,或使用Git克隆它:git clone https://github.com/spring-guides/gs-accessing-data-gemfire.git
  • 光盘进入gs-accessing-data-gemfire/initial
  • 跳转到定义一个简单实体。

完成后,您可以对照中的代码检查结果
gs-accessing-data-gemfire/complete。

从 Spring Initializr 开始

对于所有 Spring 应用程序,您应该从Spring Initializr开始。Spring Initializr 提供了一种快速的方法来获取应用程序所需的所有依赖项,并为您完成大量设置。此示例需要 Spring for Apache Geode 依赖项。

您可以使用这个预先初始化的项目并单击 Generate 下载 ZIP 文件。此项目配置为适合本教程中的示例。

手动初始化项目:

  1. 在 Web 浏览器中,导航到https://start.spring.io。该服务提取应用程序所需的所有依赖项,并为您完成大部分设置。
  2. 选择 Gradle 或 Maven 以及您要使用的语言。本指南假定您选择了 Java。
  3. 单击Dependencies并为 Apache Geode选择Spring 。
  4. 单击生成
  5. 下载生成的 ZIP 文件,该文件是根据您的选择配置的 Web 应用程序的存档。

如果您的 IDE 具有 Spring Initializr 集成,您可以从您的 IDE 完成此过程。

你也可以从 Github 上 fork 项目并在你的 IDE 或其他编辑器中打开它。

定义一个简单的实体

Apache Geode 是一种将数据映射到区域的内存中数据网格 (IMDG)。您可以配置在集群中的多个节点之间分区和复制数据的分布式区域。但是,在本指南中,我们使用了一个LOCAL区域,因此您无需设置任何额外内容,例如整个服务器集群。

Apache Geode 是一个键/值存储,一个区域实现
java.util.concurrent.ConcurrentMap接口。尽管您可以将区域视为java.util.Map,但它比简单的 Java 复杂得多Map,因为数据是在区域内分布、复制和管理的。

在此示例中,您Person仅使用几个注释将对象存储在 Apache Geode(一个区域)中。

src/main/java/hello/Person.java

package hello;import java.io.Serializable;import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.PersistenceConstructor;
import org.springframework.data.gemfire.mapping.annotation.Region;import lombok.Getter;@Region(value = "People")
public class Person implements Serializable {@Id@Getterprivate final String name;@Getterprivate final int age;@PersistenceConstructorpublic Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return String.format("%s is %d years old", getName(), getAge());}
}

在这里,您有一个Person包含两个字段的类:name和age. 在创建新实例时,您还有一个持久构造函数来填充实体。该类使用Project Lombok来简化实现。

请注意,这个类是用 注释的@Region("People")。当 Apache Geode 存储此类的实例时,会在该区People域内创建一个新条目。此类还name用 标记该字段@Id。这表示用于识别和跟踪PersonApache Geode 内部数据的标识符。本质上,带@Id注释的字段(例如name)是键,而Person实例是键/值条目中的值。Apache Geode 中没有自动生成密钥,因此您必须在name将实体持久化到 Apache Geode 之前设置 ID (the )。

下一个重要的部分是这个人的年龄。在本指南的后面部分,我们使用它来设计一些查询。

被覆盖的toString()方法打印出人的姓名和年龄。

创建简单查询

Spring Data for Apache Geode 专注于使用 Spring 在 Apache Geode 中存储和访问数据。它还继承了 Spring Data Commons 项目的强大功能,例如派生查询的能力。本质上,您不需要学习 Apache Geode (OQL) 的查询语言。您可以编写一些方法,框架会为您编写查询。

要查看其工作原理,请创建一个查询Person存储在 Apache Geode 中的对象的接口:

src/main/java/hello/PersonRepository.java

package hello;import org.springframework.data.gemfire.repository.query.annotation.Trace;
import org.springframework.data.repository.CrudRepository;public interface PersonRepository extends CrudRepository<Person, String> {@TracePerson findByName(String name);@TraceIterable<Person> findByAgeGreaterThan(int age);@TraceIterable<Person> findByAgeLessThan(int age);@TraceIterable<Person> findByAgeGreaterThanAndAgeLessThan(int greaterThanAge, int lessThanAge);}

PersonRepository从 Spring Data Commons扩展接口,并为RepositoryCrudRepository使用的值和 ID(键)指定泛型类型参数的类型(分别为和)。该接口带有许多操作,包括基本的 CRUD(创建、读取、更新、删除)和简单的查询数据访问操作(例如)。PersonStringfindById(..)

您可以根据需要通过声明其方法签名来定义其他查询。在这种情况下,我们添加findByName,它实质上搜索类型的对象Person并找到与 匹配的对象name。

你还有:

  • findByAgeGreaterThan: 寻找特定年龄以上的人
  • findByAgeLessThan: 寻找特定年龄以下的人
  • findByAgeGreaterThanAndAgeLessThan: 寻找特定年龄段的人

让我们把它连接起来,看看它是什么样子的!

创建应用程序类

以下示例创建一个包含所有组件的应用程序类:

src/main/java/hello/Application.java

package hello;import static java.util.Arrays.asList;
import static java.util.stream.StreamSupport.stream;import org.apache.geode.cache.client.ClientRegionShortcut;import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.gemfire.config.annotation.ClientCacheApplication;
import org.springframework.data.gemfire.config.annotation.EnableEntityDefinedRegions;
import org.springframework.data.gemfire.repository.config.EnableGemfireRepositories;@SpringBootApplication
@ClientCacheApplication(name = "AccessingDataGemFireApplication")
@EnableEntityDefinedRegions(basePackageClasses = Person.class,clientRegionShortcut = ClientRegionShortcut.LOCAL
)
@EnableGemfireRepositories
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}@BeanApplicationRunner run(PersonRepository personRepository) {return args -> {Person alice = new Person("Adult Alice", 40);Person bob = new Person("Baby Bob", 1);Person carol = new Person("Teen Carol", 13);System.out.println("Before accessing data in Apache Geode...");asList(alice, bob, carol).forEach(person -> System.out.println("\t" + person));System.out.println("Saving Alice, Bob and Carol to Pivotal GemFire...");personRepository.save(alice);personRepository.save(bob);personRepository.save(carol);System.out.println("Lookup each person by name...");asList(alice.getName(), bob.getName(), carol.getName()).forEach(name -> System.out.println("\t" + personRepository.findByName(name)));System.out.println("Query adults (over 18):");stream(personRepository.findByAgeGreaterThan(18).spliterator(), false).forEach(person -> System.out.println("\t" + person));System.out.println("Query babies (less than 5):");stream(personRepository.findByAgeLessThan(5).spliterator(), false).forEach(person -> System.out.println("\t" + person));System.out.println("Query teens (between 12 and 20):");stream(personRepository.findByAgeGreaterThanAndAgeLessThan(12, 20).spliterator(), false).forEach(person -> System.out.println("\t" + person));};}
}

在配置中,需要添加@EnableGemfireRepositories注解。

  • 默认情况下,@EnableGemfireRepositories扫描当前包以查找扩展 Spring Data 存储库接口之一的任何接口。您可以使用它basePackageClasses = MyRepository.class来安全地告诉 Spring Data for Apache Geode 按类型扫描不同的根包以获取特定于应用程序的存储库扩展。

需要包含一个或多个区域的 Apache Geode 缓存来存储所有数据。为此,您可以使用 Spring Data for Apache Geode 方便的基于配置的注释之一:@ClientCacheApplication、@PeerCacheApplication或@CacheServerApplication.

Apache Geode 支持不同的缓存拓扑,例如客户端/服务器、点对点 (p2p),甚至是 WAN 安排。在 p2p 中,对等缓存实例嵌入在应用程序中,您的应用程序将能够作为对等缓存成员参与集群。但是,您的应用程序受到作为集群中对等成员的所有约束,因此这不像客户端/服务器拓扑那样常用。

在我们的例子中,我们使用@ClientCacheApplication创建一个“客户端”缓存实例,它能够连接到服务器集群并与之通信。但是,为了简单起见,客户端通过使用LOCAL客户端区域在本地存储数据,而无需设置或运行任何服务器。

现在,还记得您是如何标记Person为存储在People使用 SDG 映射注释调用的区域中的@Region("People")吗?您可以使用ClientRegionFactoryBean<String, Person>bean 定义在此处定义该区域。您需要注入一个刚刚定义的缓存实例,同时命名它People。

Apache Geode 缓存实例(无论是对等方还是客户端)只是存储数据的区域容器。您可以将缓存视为 RDBMS 中的模式,将区域视为表。但是,缓存还执行其他管理功能来控制和管理您的所有区域。

类型是,将键类型 ( ) 与值类型 ( )<String, Person>匹配。StringPerson

该public static void main方法使用 Spring BootSpringApplication.run()启动应用程序并调用ApplicationRunner(另一个 bean 定义),它使用应用程序的 Spring Data 存储库在 Apache Geode 上执行数据访问操作。

PersonRepository应用程序自动装配您刚刚定义的实例。Spring Data for Apache Geode 动态创建一个具体的类来实现这个接口并插入所需的查询代码来满足接口的义务。该run()方法使用此存储库实例来演示功能。

存储和获取数据

在本指南中,您将创建三个本地Person对象:AliceBaby BobTeen Carol。最初,它们只存在于内存中。创建它们后,您必须将它们保存到 Apache Geode。

现在您可以运行多个查询。第一个按名字查找每个人。然后,您可以使用 age 属性运行一些查询来查找成人、婴儿和青少年。打开日志记录后,您可以看到 Spring Data for Apache Geode 代表您编写的查询。

要查看 SDG 生成的 Apache Geode OQL 查询,请将@ClientCacheApplication注释logLevel属性更改为config。因为查询方法(例如findByName)使用 SDG 的@Trace注解进行了注解,所以这会打开 Apache Geode 的 OQL 查询跟踪(查询级日志记录),它会显示生成的 OQL、执行时间、查询是否使用了任何 Apache Geode 索引来收集结果以及查询返回的行数。

构建一个可执行的 JAR

您可以使用 Gradle 或 Maven 从命令行运行应用程序。您还可以构建一个包含所有必要依赖项、类和资源的单个可执行 JAR 文件并运行它。构建可执行 jar 可以在整个开发生命周期、跨不同环境等中轻松地作为应用程序交付、版本化和部署服务。

如果您使用 Gradle,则可以使用./gradlew bootRun. 或者,您可以使用构建 JAR 文件./gradlew build,然后运行 ​JAR 文件,如下所示:

java -jar build/libs/gs-accessing-data-gemfire-0.1.0.jar

如果您使用 Maven,则可以使用./mvnw spring-boot:run. 或者,您可以使用构建 JAR 文件,./mvnw clean package然后运行该 JAR 文件,如下所示:

java -jar 目标/gs-accessing-data-gemfire-0.1.0.jar

此处描述的步骤创建了一个可运行的 JAR。您还可以构建经典的 WAR 文件。

您应该会看到类似这样的内容(带有其他内容,例如查询):

在与 {apache-geode-name} 链接之前...爱丽丝今年 40 岁。宝贝鲍勃 1 岁。青少年卡罗尔今年 13 岁。
按姓名查找每个人...爱丽丝今年 40 岁。宝贝鲍勃 1 岁。青少年卡罗尔今年 13 岁。
成人(18 岁以上):爱丽丝今年 40 岁。
婴儿(5 岁以下):宝贝鲍勃 1 岁。
青少年(12 至 20 岁):青少年卡罗尔今年 13 岁。

概括

恭喜!您设置了一个 Apache Geode 缓存客户端,存储了简单的实体,并开发了快速查询。

Spring认证指南:了解如何使用 Gemfire 的数据结构构建应用程序相关推荐

  1. Spring认证指南:了解如何在 GemFire 中缓存数据

    原标题:使用 Pivotal GemFire 缓存数据(Spring中国教育管理中心) 本指南演练了使用阿帕奇大地的数据管理系统,用于缓存应用程序代码中的某些调用. 有关Apache Geode概念和 ...

  2. Spring认证指南:如何构建使用Spring Integration来获取数据

    原标题:如何构建使用Spring Integration来获取数据,处理数据并将其写入文件的应用程序.(Spring中国教育管理中心) 本指南将引导您完成使用 Spring Integration 创 ...

  3. OCM exam guide - OCM认证指南

    OCM exam guide - OCM认证指南 from http://www.itpub.net/thread-1044550-1-1.html 今天开始在OU参加为期四天的Oracle 10g ...

  4. Spring认证中国教育管理中心-Spring Data Neo4j教程一

    原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程一(Spring中国教育管理中心) 5. 开始 我们为 SDN 提供了 Spring Boot 启动器.请通过您的依赖管 ...

  5. Spring认证中国教育管理中心-Spring Data Neo4j教程三

    原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程三(Spring中国教育管理中心) 6.2.处理和提供唯一 ID 6.2.1.使用内部 Neo4j id 为您的域类提供 ...

  6. Spring认证中国教育管理中心-Spring Data MongoDB教程五

    原标题:Spring认证中国教育管理中心-Spring Data MongoDB教程五(内容来源:Spring中国教育管理中心) 11.6.5.GeoJSON 支持 MongoDB 支持GeoJSON ...

  7. OracleOCM认证指南

    转 Oracle OCM 认证指南https://blog.csdn.net/tianlesoftware/article/details/4896281  OCM考试全称为Oracle Certif ...

  8. Spring 开发指南

    文档说明 (at) 为email@ 符号 Spring 开发指南 前言 2003 年年初,笔者在国外工作.其时,一位与笔者私交甚好的印度同事Paradeep从公司离职去斯坦福深造,临走送给笔者一本他最 ...

  9. 使用Spring Boot指南(零)

    如果您是从Spring Boot或" Spring"开始的,请先阅读本节.它回答了基本的"什么?","如何?"和"为什么?&quo ...

最新文章

  1. Centos配置nginx反向代理8080端口到80端口
  2. 二叉树节点个数,叶子个数,第K层个数,最低公共节点
  3. 射频电路设计与调试经验总结
  4. 关于GHOST恢复提示找不到GHOSTERR.TXT的文件(转)
  5. coreldraw错误代码14001_应用程序配置不正确,应用程序未能启动 提示14001错误代码解决方法...
  6. UCI数据库Heart Disease数据集下载
  7. 网页版数据库管理工具
  8. ECS 入门到入土: 一、什么是 ECS
  9. 富盛企业经营分析软件操作手册下载
  10. 基尼不纯度(Gini impurity)
  11. SJT生成排列(清华OJ)
  12. 数据分析AB测试实战项目
  13. HiTool工具烧录rootfs过程
  14. 【DB笔试面试622】在Oracle中,说说COUNT(*)计算行数有哪些优化手段?
  15. Qt报错:cc1plus.exe: out of memory allocating 65536 bytes
  16. MySQL(二)锁 ----- 表锁
  17. 树莓派笔记01—35美元的Linux超级计算机
  18. 每日一面 - MySQL 的双一设置是什么?
  19. 江西2022农民丰收节开幕式 国稻种芯:活动主场浮梁县举办
  20. Python图像处理:使用TensorFlow或Keras进行图像分类

热门文章

  1. 深度学习 Deep Learning
  2. linux4.9编译内核,centos6编译linux-4.9内核启用bbr
  3. dota2从窗口模式切换到独占全屏模式后黑屏解决办法
  4. ProE4.0移动电源充电宝结构设计教程
  5. bootstrap-table 合并单元格方法
  6. 卫星云图 | 记录汤加海底火山爆发,如同蘑菇云升起
  7. 云端虚拟服务器,我叫“爱迪威”
  8. 区块链+用户生态 网易星球 VS 公信宝
  9. 1.QML的介绍-windows
  10. Redis数据库系列(四)、Redis事务、乐观锁和分布式锁