javascript
apache ignite_使用Spring Data的Apache Ignite
apache ignite
Spring Data提供了一種統(tǒng)一而簡便的方法來訪問不同類型的持久性存儲(chǔ),關(guān)系數(shù)據(jù)庫系統(tǒng)和NoSQL數(shù)據(jù)存儲(chǔ)。 它位于JPA之上,添加了另一層抽象并定義了基于標(biāo)準(zhǔn)的設(shè)計(jì)以在Spring上下文中支持持久層。
Apache Ignite IgniteRepository實(shí)現(xiàn)了Spring Data CrudRepository接口并擴(kuò)展了CrudRepository的基本功能,該功能又支持:
使用Spring Data的存儲(chǔ)庫,您只需要編寫一個(gè)帶有finder方法的接口來查詢對(duì)象。 用于處理對(duì)象的所有CRUD方法將自動(dòng)提供。 舉個(gè)例子:
@RepositoryConfig(cacheName = "DogCache") public interface DogRepository extends IgniteRepository<Dog, Long> {List<Dog> getDogByName(String name);Dog getDogById (Long id); }在本文中,我們將介紹以下主題:
- 從頭開始創(chuàng)建一個(gè)Maven項(xiàng)目,以將Spring Data與Apache Ignite Grid一起使用。
- 通過Spring Data框架將一些實(shí)體持久保存到Ignite緩存中。
在開始之前,讓我們?cè)谏诚渲薪榻B項(xiàng)目的先決條件:
第1步
讓我們先設(shè)置沙箱。 創(chuàng)建一個(gè)Maven項(xiàng)目或從GitHub存儲(chǔ)庫克隆該項(xiàng)目。
mvn archetype:create -DgroupId=com.blu.imdg -DartifactId=spring-data修改pom.xml,添加以下Maven依賴項(xiàng):
<dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-core</artifactId><version>2.0.0</version> </dependency> <dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-spring</artifactId><version>2.0.0</version> </dependency> <dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-spring-data</artifactId><version>2.0.0</version> </dependency> <dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-indexing</artifactId><version>2.0.0</version> </dependency> <dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.195</version> </dependency>注意,maven h2依賴關(guān)系是可選的。 如果遇到類似“ org.h2.result.RowFactory”的錯(cuò)誤,請(qǐng)顯式添加依賴項(xiàng)。
我們的示例域模型由兩個(gè)不同的實(shí)體組成:“品種”和“狗”。
品種和狗之間的關(guān)聯(lián)是ManyToOne 。 一只狗只能有一個(gè)品種。
現(xiàn)在,讓我們通過創(chuàng)建Java類并使用所需的元信息注釋它們來映射域模型。 讓我們從Breed類開始。
package com.blu.imdg.model;import org.apache.ignite.cache.query.annotations.QuerySqlField;import java.io.Serializable;public class Breed implements Serializable {@QuerySqlField(index = true)private Long id;@QuerySqlField(index = true)private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Breed{" +"id='" + id + '\'' +", name='" + name + '\'' +'}';} }請(qǐng)注意,@ QuerySqlField批注啟用用于SQL查詢的字段。
創(chuàng)建另一個(gè)名為Dog的類,并向其中添加以下內(nèi)容。
package com.blu.imdg.model;import org.apache.ignite.cache.query.annotations.QuerySqlField;import java.io.Serializable; import java.sql.Date;public class Dog implements Serializable {@QuerySqlField(index = true)private Long id;@QuerySqlField(index = true)private String name;@QuerySqlField(index = true)private Long breedid;@QuerySqlField(index = true)private Date birthdate;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Long getBreedid() {return breedid;}public void setBreedid(Long breedid) {this.breedid = breedid;}public Date getBirthdate() {return birthdate;}public void setBirthdate(Date birthdate) {this.birthdate = birthdate;}@Overridepublic String toString() {return "Dog{" +"id=" + id +", name='" + name + '\'' +", breedid=" + breedid +", birthdate=" + birthdate +'}';} }現(xiàn)在,讓我們?yōu)橹皠?chuàng)建的所有pojo創(chuàng)建Spring存儲(chǔ)庫。
package com.blu.imdg.repositories;import com.blu.imdg.model.Dog; import org.apache.ignite.springdata.repository.IgniteRepository; import org.apache.ignite.springdata.repository.config.RepositoryConfig;import java.util.List;@RepositoryConfig(cacheName = "DogCache") public interface DogRepository extends IgniteRepository<Dog, Long> {List<Dog> getDogByName(String name);Dog getDogById (Long id); }應(yīng)該指定@RepositoryConfig批注,以將存儲(chǔ)庫映射到分布式緩存。 另外,我們有兩個(gè)查找器方法getDogByName和getDogById用于查詢緩存。
讓我們?yōu)锽reed域添加一個(gè)類似的存儲(chǔ)庫,如下所示:
package com.blu.imdg.repositories;import com.blu.imdg.model.Breed; import org.apache.ignite.springdata.repository.IgniteRepository; import org.apache.ignite.springdata.repository.config.Query; import org.apache.ignite.springdata.repository.config.RepositoryConfig; import org.springframework.data.domain.Pageable;import java.util.List;@RepositoryConfig(cacheName = "BreedCache") public interface BreedRepository extends IgniteRepository<Breed, Long> {List<Breed> getAllBreedsByName (String name);@Query("SELECT id FROM Breed WHERE id = ?")List<Long> getById (long id, Pageable pageable); }在上面的BreedRepository接口中,我們還使用@Query(queryString)批注,如果由于方法調(diào)用而需要執(zhí)行具體SQL查詢,則可以使用該批注。
第5步
讓我們創(chuàng)建緩存配置類。 創(chuàng)建一個(gè)Ignite緩存配置類,并使用@EnableIgniteRepositories批注標(biāo)記應(yīng)用程序配置,如下所示:
package com.blu.imdg.repositories;import com.blu.imdg.model.Breed; import com.blu.imdg.model.Dog; import org.apache.ignite.Ignite; import org.apache.ignite.Ignition; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.springdata.repository.config.EnableIgniteRepositories; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration @EnableIgniteRepositories public class SpringAppConfig {@Beanpublic Ignite igniteInstance() {IgniteConfiguration cfg = new IgniteConfiguration();// Setting some custom name for the node.cfg.setIgniteInstanceName("springDataNode");// Enabling peer-class loading feature.cfg.setPeerClassLoadingEnabled(true);// Defining and creating a new cache to be used by Ignite Spring Data// repository.CacheConfiguration ccfgDog = new CacheConfiguration("DogCache");CacheConfiguration ccfgBreed = new CacheConfiguration("BreedCache");// Setting SQL schema for the cache.ccfgBreed.setIndexedTypes(Long.class, Breed.class);ccfgDog.setIndexedTypes(Long.class, Dog.class);cfg.setCacheConfiguration(new CacheConfiguration[]{ccfgDog, ccfgBreed});return Ignition.start(cfg);} }請(qǐng)注意,我們?yōu)锽reed和Dog緩存使用了兩個(gè)單獨(dú)的CacheConfiguration。 另外,設(shè)置緩存SQL模式。
一旦準(zhǔn)備好使用所有配置和存儲(chǔ)庫,我們只需要在Spring應(yīng)用程序上下文中注冊(cè)配置即可。
package com.blu.imdg;import com.blu.imdg.model.Breed; import com.blu.imdg.model.Dog; import com.blu.imdg.repositories.BreedRepository; import com.blu.imdg.repositories.DogRepository; import com.blu.imdg.repositories.SpringAppConfig; import org.springframework.context.annotation.AnnotationConfigApplicationContext;import java.sql.Date; import java.util.List;/*** Hello world!**/ public class App {private static AnnotationConfigApplicationContext ctx;private static BreedRepository breedRepository;private static DogRepository dogRepository;public static void main( String[] args ){System.out.println( "Spring Data Example!" );ctx = new AnnotationConfigApplicationContext();ctx.register(SpringAppConfig.class);ctx.refresh();breedRepository = ctx.getBean(BreedRepository.class);dogRepository = ctx.getBean(DogRepository.class);//fill the repository with data and SaveBreed collie = new Breed();collie.setId(1L);collie.setName("collie");//save Breed with name colliebreedRepository.save(1L, collie);System.out.println("Add one breed in the repository!");// Query the breedList<Breed> getAllBreeds = breedRepository.getAllBreedsByName("collie");for(Breed breed : getAllBreeds){System.out.println("Breed:" + breed);}//Add some dogsDog dina = new Dog();dina.setName("dina");dina.setId(1L);dina.setBreedid(1L);dina.setBirthdate(new Date(System.currentTimeMillis()));//Save DinadogRepository.save(2L,dina);System.out.println("Dog dina save into the cache!");//Query the Dog DinaList<Dog> dogs = dogRepository.getDogByName("dina");for(Dog dog : dogs){System.out.println("Dog:"+ dog);}} }上面的代碼片段非常簡單。 首先,我們創(chuàng)建一個(gè)Spring注釋的上下文并注冊(cè)我們的存儲(chǔ)庫。 接下來,我們獲得對(duì)BreedRepository和DogRepository的引用以插入一些數(shù)據(jù)。 要查詢數(shù)據(jù),我們使用基本的CRUD操作或方法,這些操作或方法將自動(dòng)轉(zhuǎn)換為Apache Ignite SQL查詢:
List<Dog> dogs = dogRepository.getDogByName("dina"); for(Dog dog : dogs){System.out.println("Dog:"+ dog); }讓我們構(gòu)建并運(yùn)行該應(yīng)用程序。 執(zhí)行以下命令。
mvn clean install mvn exec:java -Dexec.mainClass=com.blu.imdg.App您應(yīng)該在控制臺(tái)中找到很多日志消息。
日志消息確認(rèn)兩個(gè)條目(dina和colle-collie)已刷新到Ignite緩存中,并從緩存中檢索了狗Dina 。 讓我們通過Ignite Visor探索緩存。
已為實(shí)體創(chuàng)建了兩個(gè)不同的緩存:“品種”和“狗”。 如果我們掃描Dog緩存的緩存條目,則應(yīng)在其上找到以下實(shí)體。
實(shí)體Dina已使用Breed牧羊犬的鑰匙保存在緩存中。
如果要了解有關(guān)Apache Ignite的更多信息(使用JPA,Hibernate或MyBatis),請(qǐng)參閱《 使用Apache Ignite進(jìn)行高性能內(nèi)存計(jì)算 》一書。
翻譯自: https://www.javacodegeeks.com/2017/07/apache-ignite-spring-data.html
apache ignite
總結(jié)
以上是生活随笔為你收集整理的apache ignite_使用Spring Data的Apache Ignite的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 家访登记表家访内容(家访备案表)
- 下一篇: 积分和人民币比率_通过比率路由到旧版和现