Spring Data Pivotal Gemfire教程

1. Spring Data Pivotal Gemfire –简介

在这篇文章中,我们将介绍有关Spring Data Pivotal Gemfire的全面教程。 Pivotal Gemfire是由Apache Geode支持的内存中数据网格解决方案。 使用Pivotal Gemfire构建的应用程序使您可以在分布式服务器节点之间轻松扩展系统。 无论分布结构如何,Pivotal Gemfire均可确保数据一致性。 它使应用程序能够向数百万用户提供实时数据。
另一方面,Spring框架是一种广泛使用的框架,它为构建企业级应用程序提供了基础。 在本文中,我们将讨论Spring数据(Spring框架的众多模块之一)如何与Pivotal Gemfire集成,以加快开发过程并将Spring框架的功能引入Pivotal Gemfire应用程序。

2.本教程的先决条件

在进入本教程之前,有必要了解进行的假设以及继续进行本教程所需的工具。 在此,我假设您了解以下内容:

  • 了解访问关键数据
  • 对Spring框架的基本了解
  • 对Pivotal API调用的基本了解

在整个教程中,我们将使用以下工具和规范:

  • JDK 1.8
  • 弹簧工具套件/ IntelliJ
  • Maven的3.2+

3.开始

首先从项目开始,让我们创建一个Maven项目并添加以下依赖项。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.springframework.samples</groupId><artifactId>pivotal_tutorial</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version></parent><properties><spring-shell.version>1.2.0.RELEASE</spring-shell.version></properties><repositories><repository><id>spring-releases</id><url>https://repo.spring.io/libs-release</url></repository></repositories><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-gemfire</artifactId></dependency><dependency><groupId>org.springframework.shell</groupId><artifactId>spring-shell</artifactId><version>${spring-shell.version}</version><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

保存具有这些依赖项的项目,并允许其进行构建。 上面的文件包含必需的Spring Boot依赖关系以及Pivotal Gemfire的Spring Data依赖关系。 一旦项目下载了相关的依赖项,就可以继续编码部分。

带有Pivotal Gemfire的Spring Data帮助我们配置对分布式数据访问中心的访问。 这种结合可以帮助我们降低对磁盘的命中率,并使用内存中的缓存级别来维持更好的响应时间。 本教程将带您完成完整的设置和配置过程。

4.创建一个实体

首先,主要要求是创建一个实体。 让我们创建一个简单的Person实体,其中包含一个人的详细信息,例如人的姓名和年龄。 要创建这样的实体,请使用以下代码。

PersonEntity.java

package pivotal_tutorial;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 PersonEntity implements Serializable {@Id@Getterprivate final String name;@Getterprivate final int age;@PersistenceConstructorpublic PersonEntity(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}@Overridepublic String toString() {return String.format("%s is %d years old", getName(), getAge());}
}

如您所见,有两个属性-名称和年龄,以及一个持久性构造函数。 在这里,请注意,该类已使用注释@Region进行注释。 此批注是枢轴指示符,用于指示框架使用特定名称存储此类的实例。 当它读取注释@Region("People") ,它将理解必须将PersonEntity的实例存储为People的名称。 带有注释@Id的字段将是实例的唯一键。

这里假设您了解Pivotal没有任何自动密钥生成系统。 因此,在实际进行数据持久化之前,您需要确保设置了id字段。

5.创建简单的查询

与Pivotal Gemfire框架结合的Spring Data就是关于存储和持久化数据的。 它着重于此管理对数据的访问。 此外,它还继承了Spring Data框架的强大功能,例如获得查询的功能。 框架的强大功能是您不再需要学习关键的gemfire查询语言。 您所需要做的就是编写一些Java代码段,该框架将在后端构建查询。
让我们从为上面显示的实体创建类似的片段开始。

PersonQueries.java

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

在上面的代码中,请注意,该类扩展了CrudRepository ,该类是Spring Data框架提供的类。 注释@Trace标识需要使用相关的函数来为后端运行的Pivotal Gemfire框架创建查询。 这些功能很容易理解。 下面提供了简要说明:

  • findByName :通过作为参数提供的name值查找实体
  • findByAgeGreaterThan :查找年龄大于提供的值的实体。 返回PersonEntity实例的可迭代列表。
  • findAgeLessThan :查找年龄小于提供的值的实体。 返回PersonEntity实例的可迭代列表。
  • findByAgeGreaterThanAndLessThan :查找年龄大于或小于提供的值的实体。 返回PersonEntity实例的可迭代列表。

6.创建一个应用程序

现在我们已经准备好查询和实体,让我们开始创建有助于数据事务的实际应用程序。 将创建具有视图的应用程序,以实例化实体并处理数据。 以下代码创建具有所有必要组件的应用程序。

App.java

package pivotal_tutorial;
import static java.util.Arrays.asList;
import static java.util.stream.StreamSupport.stream;import java.io.IOException;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", logLevel = "error")
@EnableEntityDefinedRegions(basePackageClasses = PersonEntity.class,clientRegionShortcut = ClientRegionShortcut.LOCAL)
@EnableGemfireRepositories
public class App {public static void main(String[] args) throws IOException {SpringApplication.run(App.class, args);}@BeanApplicationRunner run(PersonRepo personRepository) {return args -> {PersonEntity abk = new PersonEntity("Abhishek Kothari", 26);PersonEntity sumit = new PersonEntity("Sumit Punjabi", 25);PersonEntity john = new PersonEntity("John Doe", 34);System.out.println("Entering into accessing data from Pivotal GemFire framework");asList(abk, sumit, john).forEach(person -> System.out.println("\t" + person));System.out.println("Saving Alice, Bob and Carol to Pivotal GemFire...");personRepository.save(abk);personRepository.save(sumit);personRepository.save(john);System.out.println("Lookup each person by name...");asList(abk.getName(), sumit.getName(), john.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 teens (less than 30):");stream(personRepository.findByAgeLessThan(30).spliterator(), false).forEach(person -> System.out.println("\t" + person));System.out.println("Query teens (between 12 and 30):");stream(personRepository.findByAgeGreaterThanAndAgeLessThan(12, 30).spliterator(), false).forEach(person -> System.out.println("\t" + person));};}
}

上面的类包含对已定义实体的所有可能的查询调用。 请注意,在该类中已注释了许多注释。 下面提供了每个注释的描述:

@SpringBootApplication :此批注指定该类将被视为Spring引导应用程序的起点。
@ClientCacheApplication :此注释指定应用程序应在后端使用由Spring Data支持的数据的客户端缓存。
@EnableDefinedRegions :注释用于指定需要使用并可用的实体。 该注释基本上完成了公开该类的相应实体的方法的任务。 @EnableGemfireRepositories :这是最重要的注释。 从名称本身可以清楚地看到注释的目的。 为了在Spring应用程序启动时启用gemfire存储库,此注释是必需的。 该注释将强制扫描当前包,以查找扩展Spring Data仓库类之一(例如PersonEntity

有时候,我们可能不希望将所有Spring Data实体公开到Gemfire框架中。 可以通过显式指定所需实体扩展的类来防止这种情况。 可以使用其属性basePackageClasses = TheRepository.class完成此操作
这里要注意的是,在区域定义中,我们指定了局部区域。 这对于Pivotal Gemfire很重要。 为了存储数据,Pivotal需要至少1个或更多区域。

7.缓存配置

Pivotal中可能有三种不同的缓存配置。 根据我们计划使用的区域,我们可以使用所需的批注之一使用Spring Data框架通过Pivotal Gemfire后端指定缓存和数据持久性。 以下是可以使用的三种可能的注释:

@ClientCacheApplication :将数据客户端缓存在本地存储中
@PeerCacheApplication :在同级之间缓存数据
@CacheServerApplication :在服务器端缓存数据

Pivotal Gemfire支持多种缓存拓扑,例如客户端/服务器,对等甚至WAN或LAN安排。 在客户端/服务器缓存拓扑中,客户端缓存查询的数据,而服务器缓存所有数据。 在对等拓扑中,即使网络中的设备也将缓存数据,以将其提供给最近的对等体。 对于WAN或LAN拓扑,如果您已连接到特定网络,则设备将缓存数据,并开始将数据分发给其他用户。 在上述情况下,我们使用了客户端缓存,因此一旦执行查询,缓存将完全在客户端完成。 出于相同的原因,我们指定了LOCAL区域。

我们将实体连接到名为People的区域。 这是使用注释Region指定的。 该注释是从Spring Data框架使用的。 稍后使用代码片段ClientRegionFactoryBean<String, PersonEntity>用于bean定义在应用程序层中映射此区域。 因此,我们注入了bean定义,并在People区域中定义了实例,否则,如果没有Spring Data框架,这是不可能的。

8.存放物件

在本指南中,您将创建三个本地Person对象,Abhishek,Sumit John。 最初,它们仅存在于内存中。 创建它们之后,您必须将它们保存到Pivotal GemFire。

现在,您运行几个查询。 第一个按名称查找所有人。 然后,您使用年龄属性执行少量查询以查找成人,婴儿和青少年。 打开日志记录后,您可以看到Spring Data for Pivotal GemFire代表您编写的查询。

9.执行代码并构建一个jar

现在,我们已经了解了代码的性能以及下一步的时间。 下一步是实际执行代码,并查看代码如何工作。 要执行代码,请在您的Spring Tool Suite或IntelliJ中将该应用程序作为Java应用程序运行。 在执行该应用程序时,您将看到类似于以下所示的输出。 它可能会略有不同,具体取决于您使用的库的版本。

.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.0.3.RELEASE)[info 2018/08/30 20:36:45.110 IST  tid=0x1] Starting App on MacBook-Air.local with PID 96473 (/Users/abhishekkothari/Documents/workspace-sts-3.9.5.RELEASE/pivotal_tutorial/target/classes started by abhishekkothari in /Users/abhishekkothari/Documents/workspace-sts-3.9.5.RELEASE/pivotal_tutorial)[info 2018/08/30 20:36:45.118 IST  tid=0x1] No active profile set, falling back to default profiles: default[info 2018/08/30 20:36:45.219 IST  tid=0x1] Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6c1a5b54: startup date [Thu Aug 30 20:36:45 IST 2018]; root of context hierarchySLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Entering into accessing data from Pivotal GemFire frameworkAbhishek Kothari is 26 years oldSumit Punjabi is 25 years oldJohn Doe is 34 years old
Saving Alice, Bob and Carol to Pivotal GemFire...
Lookup each person by name...Abhishek Kothari is 26 years oldSumit Punjabi is 25 years oldJohn Doe is 34 years old
Query adults (over 18):Sumit Punjabi is 25 years oldJohn Doe is 34 years oldAbhishek Kothari is 26 years old
Query teens (less than 30):Sumit Punjabi is 25 years oldAbhishek Kothari is 26 years old
Query teens (between 12 and 30):Sumit Punjabi is 25 years oldAbhishek Kothari is 26 years old

可以看出,该应用程序已执行,并且提取的lamba函数根据指定的过滤器使用数据。 请注意,这里我们创建了一个完成实体,存储并检索它,而没有真正对Pivotal gemfire数据库进行任何设置。 这些查询返回了我们这些实例,而没有进行任何大的努力。 通过这种方式,Spring Data批注有助于简化Pivotal Gemfire应用程序的应用程序开发,并帮助您减少从头开始进行编码和设置的整个工作量。

为了构建该应用程序并将其导出到其他地方以供远程使用,您需要做的就是使用Maven来构建应用程序jar。 为此,只需执行以下命令。

./mvnw spring-boot:run

上面的命令将构建一个可运行的jar,供您在任何系统中执行。 因此,您可以使用带有Pivotal Gemfire数据分发的Spring Data Framework轻松构建可移植的应用程序。

10.下载项目

上面已经讨论过的STS项目可以在下面的链接中找到。

下载
您可以在此处下载此示例的完整源代码: pivotal-tutorial.zip

翻译自: https://www.javacodegeeks.com/2018/08/spring-data-pivotal-gemfire-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机诞生发展分类特点及应用,计算机的诞生与发展,及其特点

计算机基本常识一、计算机的概念&#xff1a;计算机是一种能迅速而高效的自动完成信息处理的电子设备&#xff0c;它能按照程序对信息进行加工、处理、存储。二、计算机的诞生与发展1、诞生&#xff1a;1946年&#xff0c;美国为计算弹道轨迹而研制成功了世界第一台计算机。2、…

404 单页应用 报错 路由_通过 Laravel 创建一个 Vue 单页面应用(五)

文章转发自专业的Laravel开发者社区&#xff0c;原始链接&#xff1a;https://learnku.com/laravel/t/34858我们在第4部分完成了编辑用户的功能&#xff0c;并且学习了如何使用 v-model 来监听视图组件中用户信息的更改。现在我们可以开始构思删除用户功能&#xff0c;以及删除…

使用计算机求解雷达方程,关于雷达方程

满意答案zjit99402014.01.27采纳率&#xff1a;41% 等级&#xff1a;12已帮助&#xff1a;2803人带宽校正系数是Co而不是Do.我们知道雷达接收到回波信号后&#xff0c;必须进行信号处理&#xff0c;使中频接收机的输出端(检波器的输入端)输出的信号和噪声功率比(简称信噪比)…

hook 与aspectj_将AspectJ与NetBeans平台开发集成

hook 与aspectj您是否正在使用NetBeans平台开发项目&#xff1f; 您愿意使用AspectJ来使用AOP吗&#xff1f; 您不知道如何将AspectJ编译器集成到NetBeans的内部版本中&#xff1f; 如果您的回答是“是”&#xff0c;则此帖子适合您。 我决定写这篇技术文章&#xff0c;是因为…

考试用计算机反思800字,考试反思作文800字

【考试】作者&#xff1a; 武佳硕2017年 5月6日 星期六 晴今天我们进行了一场在英华初中免费生考试前测试。虽然这次考试&#xff0c;不会算我们的真实成绩&#xff0c;但是老师要测我们的考试状态&#xff0c;一开始我还自信满满地认为我能考好&#xff0c;没想到我居然靠得一…

静茹docker容器的几种方法_1-容器和docker基础知识

[TOC]## 一 容器的概念### 1.什么是容器&#xff1a;容器是在隔离的环境里面运行的一个进程&#xff0c;这个隔离的环境有自己的系统目录文件&#xff0c;有自己的ip地址&#xff0c;主机名等。也可以说&#xff1a;容器是一种轻量级虚拟化的技术。### 2.容器相对于kvm虚拟机的…

JSON-B非对称属性绑定

JSON-B规范定义了诸如JsonbProperty或JsonbTransient类的绑定批注&#xff0c;以声明方式将Java对象映射到JSON&#xff0c;然后再映射回JSON。 这些注释可以“非对称地”用于定义序列化和反序列化的不同处理。 如果在Java属性上或在getter和setter上标注JSON Binding批注&…

怎么利用计算机计算潮流计算,电力系统潮流计算的目的是什么

电力系统潮流计算的目的是什么潮流计算是研究电力系统稳态运行情况的一种基本电气计算&#xff0c;常规潮流计算的任务是根据给定的运行条件和网路结构确定整个系统的运行状态&#xff0c;如各母线上的电压(幅值及相角)、网络中的功率分布以及功率损耗等。潮流计算的结果是电力…

7500 cpuz跑分 i5_小米Pro笔记本亮相跑分网站:处理器包含AMD Zen3、11代酷睿

2020年已经接近尾声&#xff0c;随之而来的将会是一大波新品发布会&#xff0c;不仅是手机&#xff0c;笔记本电脑、显卡等产品也会有新品亮相。一年一度的CES 2021也即将开幕&#xff0c;届时英特尔、英伟达、AMD等知名厂商也都将出席活动。据悉&#xff0c;英特尔将推出11代酷…

2016年计算机网考,2016年电大:计算机网考(全)练习题.doc

2016年电大&#xff1a;计算机网考(全)练习题用来给电子工作表中的行号进行编号的是______。数字在Excel中&#xff0c;输入数字作为文本使用时&#xff0c;需要输入作为先导标记的字符是______。单引号电子工作表中每个单元格的默认格式为______。常规不包含在Excel的格式工具…

2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用

点击上面“妙招姐”免费关注图文版&#xff1a;哈喽大家好&#xff0c;我是妙招姐&#xff0c;洗洁精是我们生活中的必须品&#xff0c;但用洗洁精来清洗餐具或水果等和食物相关的东西多多少少都会有残留&#xff0c;那么今天妙招姐就来教大家用橘子皮来自己制作洗洁精&#xf…

Apache Ignite,Hazelcast,Cassandra和Tarantool之间的主要区别

Apache Ignite在世界范围内得到广泛使用&#xff0c;并且一直在增长。 诸如Barclays&#xff0c;Misys&#xff0c;Sberbank&#xff08;欧洲第三大银行&#xff09;&#xff0c;ING&#xff0c;JacTravel之类的公司都使用Ignite来增强其体系结构的各个部分&#xff0c;这些部分…

n.html id=198,YPE htmlhtml lang=enhead data-n-head-ssrtitle data-n-=true小程序获取不到unionid 微信开放社区...

我们的小程序和公众号绑定在同一开放平台&#xff0c;隶属于同一主体&#xff0c;新用户在经过公众号授权登陆后&#xff0c;在小程序的登陆接口获取的信息只有session_key和open_id&#xff0c;没有unionId&#xff0c;请问这是什么问题我们已经在用户登陆小程序之前进行了同一…

centos模拟post请求_java模拟post和get请求(2019/10/25)

一、http含义的介绍1.http协议是超文本传输协议--具体含义请百度2.基于tcp/ip协议--注意和udp的区别3.无状态---本次请求记不住以往请求的状态4.无连接--每次连接只处理一个请求5.媒体独立二、请求报文的组成部分请求行 请求方式 请求url http协议版本请求头关于请求头和响应头…

浙江计算机二级报名步骤,浙江2016年9月计算机二级考生报名流程

导读&#xff1a;2016年9月浙江全国计算机二级考试网上报名时间为2016年6月1日-6月19日;现场缴费确认为6月1日6月20日&#xff0c;具体报名流程请看如下信息。想了解更多相关信息请持续关注我们应届毕业生考试网!(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#…

单开双控_卧室或者楼梯灯怎么安装单联双控

点击上面蓝色字体关注&#xff01;装修图例 | 别墅装修 | 装潢装饰 | 样板楼梯 | 装修设计在改电和布线前我们在这两个开关之间预埋3根线就够了。如果一头接电源&#xff0c;另一头接控制线的话&#xff0c;预埋2根线就够了&#xff0c;双控开关有三个接线柱&#xff0c;只要记…

Apache Ignite变得简单:第一个Java应用程序

在本文中&#xff0c;我们将更进一步&#xff0c;让您完成第一个Ignite应用程序的创建&#xff0c;以从分布式缓存中进行读写操作。 作为第一个示例&#xff0c;我们将尽可能简单地向您展示如何用Java编写用于处理Apache Ignite集群数据的应用程序。 可从GitHub存储库&#xf…

华测数据导出方法_输电线路塔基测量成图方法研究与应用

1.前言塔基测量成图软件是EATool第一个电力勘测模块&#xff0c;也是笔者个人刚参加工作时开发的第一个与工作直接相关的软件。该模块开发开始于2010年&#xff0c;于2012基本成型。记得第一次参加线路工程终勘定位&#xff0c;对于老员工的塔基断面测量模式有着诸多疑惑&#…

MQ在计算机组成,[转载]计算机组成框图-计算机运行流程(例子)

计算机组成框图-计算机运行流程ACC(Accumulator)&#xff1a; 累加器MQ(Multiplier-Quotient Register)&#xff1a;乘商寄存器ALU&#xff1a;算术逻辑单元X&#xff1a;操作数寄存器CU&#xff1a;控制单元IR(Instruction Register)&#xff1a;指令寄存器(用于存放当前指令)…

提交时是使用防抖还是节流_使用BlockingExecutor进行节流任务提交

提交时是使用防抖还是节流JDK的java.util.concurrent.ThreadPoolExecutor允许您将任务提交到线程池&#xff0c;并使用BlockingQueue来保存提交的任务。 如果要提交的任务有数千个&#xff0c;请指定一个“绑定”队列&#xff08;即最大容量的队列&#xff09;&#xff0c;否则…