当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 22:49:03 Java

Spring认证指南:了解如何使用Gemfire的数据结构构建应用程序。(Spring中国教育管理中心)SpringCertificationGuide:LearnHowtoBuildApplicationsUsingGemfire'sDataStructuresAccessDatainPivotalGemFire本指南将带您完成为ApacheGeode数据管理系统构建应用程序的过程。您将构建什么您将使用SpringDataforApacheGeode来存储和检索POJO。你需要什么大约15分钟最喜欢的文本编辑器或IDEJDK1.8或更高版本Gradle4+或Maven3.2+你也可以直接将代码导入IDE:SpringToolSuite(STS)IntelliJIDEA如何完成本指南最喜欢最喜欢Spring入门指南,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。要从头开始,请继续使用SpringInitializr。跳过基础知识:下载并解压缩本指南的源代码存储库,或使用Git克隆它:gitclonehttps://github.com/spring-gui...cdintogs-accessing-data-gemfire/initialjumps定义一个简单的实体。完成后,您可以根据gs-accessing-data-gemfire/complete中的代码检查结果。从SpringInitializr开始对于所有Spring应用程序,您都应该从SpringInitializr开始。SpringInitializr提供了一种快速获取应用程序所需的所有依赖项的方法,并为您完成了很多设置。此示例需要SpringforApacheGeode依赖项。您可以使用这个预先初始化的项目并单击生成以下载ZIP文件。该项目配置为适合本教程中的示例。手动初始化项目:在Web浏览器中,导航到https://start.spring.io。该服务会引入您的应用程序所需的所有依赖项,并为您完成大部分设置。选择Gradle或Maven以及您要使用的语言。本指南假设您选择了Java。单击Dependencies并为ApacheGeode选择Spring。单击生成。下载生成的ZIP文件,它是根据您的选择配置的Web应用程序的存档。如果您的IDE集成了SpringInitializr,您可以从IDE中完成此过程。您还可以从Github中fork项目并在您的IDE或其他编辑器中打开它。定义简单实体ApacheGeode是一个内存数据网格(IMDG),可将数据映射到区域。您可以配置分布式区域,跨集群中的多个节点分区和复制数据。但是,在本指南中,我们使用本地区域,因此您不需要设置任何额外的东西,例如整个服务器集群。ApacheGeode是一个键/值存储,其区域实现了java.util.concurrent.ConcurrentMap接口。尽管您可以将区域视为java.util.Map,但它比简单的JavaMap复杂得多,因为数据是在区域内分布、复制和管理的。在此示例中,您将一个Person对象存储在ApacheGeode(一个区域)中,仅带有一些注释。src/main/java/hello/Person.javapackagehello;导入java.io.Serializable;导入org.springframework.data.annotation.Id;导入org.springframework.data.annotation.PersistenceConstructor;导入org.springframework.data.gemfire.mapping.annotation.Region;导入lombok.Getter;@Region(value="People"),intage){this.name=name;this.age=age;}@OverridepublicStringtoString(){returnString.format("%s是%d岁",getName(),getAge());}}这里有一个包含两个字段的Person类:name和age。在创建新实例时,您还有一个持久构造函数来填充实体。此类使用ProjectLombok来简化实现。请注意,此类带有@Region("People")注释。当ApacheGeode存储此类的实例时,将在区域的人员域中创建一个新条目。此类还使用@Id命名该字段。这表示用于识别和跟踪PersonApacheGeode中的数据的标识符。本质上,用@Id注解的字段(比如name)是键,Person实例是键/值条目中的值。ApacheGeode中没有自动生成的键,因此您必须在名称前设置ID(the)才能将实体持久化到ApacheGeode中。下一个重要部分是人的年龄。我们将在本指南的后面使用它来设计一些查询。重写的toString()方法打印出此人的姓名和年龄。为ApacheGeode创建简单查询SpringData侧重于使用Spring在ApacheGeode中存储和访问数据。它还继承了SpringDataCommons项目的强大功能,例如派生查询的能力。本质上,您不需要学习ApacheGeode(OQL)查询语言。您编写方法,框架为您编写查询。要查看它是如何工作的,请创建一个接口来查询存储在ApacheGeode中的Person对象:src/main/java/hello/PersonRepository.javapackagehello;导入org.springframework.data.gemfire.repository.query.annotation.Trace;导入org.springframework.data.repository.CrudRepository;publicinterfacePersonRepositoryextendsCrudRepository{@TracePersonfindByName(Stringname);@TraceIterablefindByAgeGreaterThan(intage);@TraceIterablefindByAgeLessThan(intage);@TraceIterablefindByAgeGreaterThanAndAgeLessThan(intgreaterThanAge,intlessThanAge);}PersonRepository从SpringDataCommons扩展接口并指定类型RepositoryCrudRepository使用的值和ID(key)的泛型类型参数(分别为and)。该接口带有许多操作,包括基本的CRUD(创建、读取、更新、删除)和简单的查询数据访问操作(例如)。PersonStringfindById(..)您可以根据需要通过声明其方法签名来定义其他查询。在本例中,我们添加了findByName,它本质上是搜索Person类型的对象并找到一个匹配名称的对象。你还有:findByAgeGreaterThan:找特定年龄以上的人findByAgeLessThan:找特定年龄以下的人findByAgeGreaterThanAndAgeLessThan:找特定年龄以下的人让我们把它挂起来,看看它长什么样!创建一个应用程序类以下示例创建一个包含所有组件的应用程序类:src/main/java/hello/Application.javapackagehello;importstaticjava.util.Arrays.asList;importstaticjava.util.stream.StreamSupport.stream;导入org.apache.geode.cache.client.ClientRegionShortcut;导入org.springframework.boot.ApplicationRunner;导入org.springframework.boot.SpringApplication;导入org.springframework.boot.autoconfigure.SpringBootApplication;导入org.springframework.context。annotation.Bean;导入org.springframework.data.gemfire.config.annotation.ClientCacheApplication;导入org.springframework.data.gemfire.config.annotation.EnableEntityDefinedRegions;导入org.springframework.data.gemfire.repository.config.EnableGemfireRepositories;@SpringBootApplication@ClientCacheApplication(name="AccessingDataGemFireApplication")@EnableEntityDefinedRegions(basePackageClasses=Person.class,clientRegionShortcut=ClientRegionShortcut.LOCAL)@EnableGemfireRepositoriespublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}@BeanApplicationRunnerrun(PersonRepositorypersonRepository){returnargs->{Personalice=newPerson("成年爱丽丝",40);Personbob=newPerson("小鲍勃",1);Personcarol=newPerson("少年颂歌",13);System.out.println("在ApacheGeode中访问数据之前...");asList(alice,bob,carol).forEach(person->System.out.println("\t"+person));System.out.println("将Alice、Bob和Carol保存到PivotalGemFire...");personRepository.save(爱丽丝);personRepository.save(bob);personRepository.save(卡罗尔);System.out.println("按名字查找每个人...");asList(alice.getName(),bob.getName(),carol.getName()).forEach(name->System.out.println("\t"+personRepository.findByName(名字)));System.out.println("查询成人(18岁以上):");stream(personRepository.findByAgeGreaterThan(18).spliterator(),false).forEach(person->System.out.println("\t"+person));System.out.println("查询宝宝(5岁以下):");stream(personRepository.findByAgeLessThan(5).spliterator(),false).forEach(person->System.out.println("\t"+person));System.out.println("查询青少年(12到20岁之间):");stream(personRepository.findByAgeGreaterThanAndAgeLessThan(12,20).spliterator(),false).forEach(person->System.out.println("\t"+person));};}}在配置中,需要添加@EnableGemfireRepositories注释默认情况下,@EnableGemfireRepositories扫描当前包以查找任何扩展SpringData存储库接口之一的接口。您可以使用basePackageClasses=MyRepository.class安全地告诉SpringDataforApacheGeode按类型扫描不同的根包以获取特定于应用程序的存储库扩展。需要包含一个或多个区域的ApacheGeode缓存来存储所有数据。为此,您可以使用SpringDataforApacheGeode的基于配置的方便注释之一:@ClientCacheApplication、@PeerCacheApplication或@CacheServerApplication。ApacheGeode支持不同的缓存拓扑结构,例如客户端/服务器、对等(p2p)甚至WAN排列。在p2p中,对等缓存实例嵌入到应用程序中,您的应用程序将能够作为对等缓存成员参与集群。但是,您的应用程序受到作为集群中对等成员的所有约束,因此这不像客户端/服务器拓扑那样常见。在我们的例子中,我们使用@ClientCacheApplication创建一个“客户端”缓存实例,该实例能够连接到服务器集群并与之通信。但是,为了简单起见,客户端通过使用LOCAL客户端区域在本地存储数据,而无需设置或运行任何服务器。现在,还记得您如何使用SDG映射注释将Person标记为存储在People调用的Region中的@Region("People")吗?您可以在此处使用ClientRegionFactoryBeanbean定义来定义区域。您需要注入刚刚定义的缓存实例,也将其命名为People。ApacheGeode缓存实例(无论是对等点还是客户端)只是存储数据的区域容器。您可以将缓存视为RDBMS中的模式,将区域视为表。但是,缓存还执行其他管理功能来控制和管理您的所有区域。类型是,将键类型()与值类型()匹配。StringPerson的publicstaticvoidmain方法使用SpringBootSpringApplication.run()启动应用程序并调用ApplicationRunner(另一个bean定义),它使用应用程序的SpringData存储库在ApacheGeode上执行数据访问操作。PersonRepository应用程序自动装配您刚刚定义的实例。ApacheGeode的SpringData动态创建一个实现此接口的具体类,并插入满足接口义务所需的查询代码。run()方法使用此存储库实例来演示功能。存储和检索数据在本教程中,您将创建三个本地Person对象:Alice、BabyBob和TeenCarol。最初,它们仅存在于内存中。创建它们之后,您必须将它们保存到ApacheGeode。现在您可以运行多个查询。第一个按名字查找每个人。然后,您可以使用年龄属性运行一些查询来查找成人、婴儿和青少年。启用日志记录后,您可以看到SpringDataforApacheGeode代表您编写的查询。要查看SDG生成的ApacheGeodeOQL查询,请将@ClientCacheApplication注释logLevel属性更改为config。因为查询方法(比如findByName)是用SDG的@Trace注解来注解的,这就开启了ApacheGeode的OQL查询追踪(query-levellogging),显示OQL生成,执行时间,查询是否使用了任何ApacheGeode索引来收集查询返回的结果和行数。构建一个可执行JAR,您可以使用Gradle或Maven从命令行运行应用程序。您还可以构建一个包含所有必要依赖项、类和资源的可执行JAR文件并运行它。构建可执行jar可以在整个开发生命周期中跨不同环境等轻松交付、版本化和部署为应用程序服务。如果你使用Gradle,你可以使用./gradlewbootRun。或者,您可以使用./gradlewbuild构建JAR文件,然后像这样运行JAR文件:java-jarbuild/libs/gs-accessing-data-gemfire-0.1.0.jar如果您使用Maven,则可以使用./mvnw弹簧启动:运行。或者,您可以使用./mvnwcleanpackage构建JAR文件,然后运行??JAR文件,如下所示:java-jartarget/gs-accessing-data-gemfire-0.1.0.jar此处描述的步骤创建一个可运行的JAR.您还可以构建经典WAR文件。您应该会看到类似这样的内容(带有附加内容,例如查询):在与{apache-geode-name}链接之前...Alice40岁。小鲍勃1岁了。青少年卡罗尔13岁。按名字查找每个人...爱丽丝40岁。小鲍勃1岁了。青少年卡罗尔13岁。成人(18岁以上):爱丽丝40岁。婴儿(5岁以下):小鲍勃1岁。青少年(12至20岁):青少年卡罗尔13岁。总结祝贺!您设置了一个ApacheGeode缓存客户端,存储了简单的实体,并开发了快速查询。