javascript
apache ignite_使用Spring Data的Apache Ignite
apache ignite
Spring Data提供了一種統一而簡便的方法來訪問不同類型的持久性存儲,關系數據庫系統和NoSQL數據存儲。 它位于JPA之上,添加了另一層抽象并定義了基于標準的設計以在Spring上下文中支持持久層。
Apache Ignite IgniteRepository實現了Spring Data CrudRepository接口并擴展了CrudRepository的基本功能,該功能又支持:
使用Spring Data的存儲庫,您只需要編寫一個帶有finder方法的接口來查詢對象。 用于處理對象的所有CRUD方法將自動提供。 舉個例子:
@RepositoryConfig(cacheName = "DogCache") public interface DogRepository extends IgniteRepository<Dog, Long> {List<Dog> getDogByName(String name);Dog getDogById (Long id); }在本文中,我們將介紹以下主題:
- 從頭開始創建一個Maven項目,以將Spring Data與Apache Ignite Grid一起使用。
- 通過Spring Data框架將一些實體持久保存到Ignite緩存中。
在開始之前,讓我們在沙箱中介紹項目的先決條件:
第1步
讓我們先設置沙箱。 創建一個Maven項目或從GitHub存儲庫克隆該項目。
mvn archetype:create -DgroupId=com.blu.imdg -DartifactId=spring-data修改pom.xml,添加以下Maven依賴項:
<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依賴關系是可選的。 如果遇到類似“ org.h2.result.RowFactory”的錯誤,請顯式添加依賴項。
我們的示例域模型由兩個不同的實體組成:“品種”和“狗”。
品種和狗之間的關聯是ManyToOne 。 一只狗只能有一個品種。
現在,讓我們通過創建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 + '\'' +'}';} }請注意,@ QuerySqlField批注啟用用于SQL查詢的字段。
創建另一個名為Dog的類,并向其中添加以下內容。
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 +'}';} }現在,讓我們為之前創建的所有pojo創建Spring存儲庫。
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); }應該指定@RepositoryConfig批注,以將存儲庫映射到分布式緩存。 另外,我們有兩個查找器方法getDogByName和getDogById用于查詢緩存。
讓我們為Breed域添加一個類似的存儲庫,如下所示:
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)批注,如果由于方法調用而需要執行具體SQL查詢,則可以使用該批注。
第5步
讓我們創建緩存配置類。 創建一個Ignite緩存配置類,并使用@EnableIgniteRepositories批注標記應用程序配置,如下所示:
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);} }請注意,我們為Breed和Dog緩存使用了兩個單獨的CacheConfiguration。 另外,設置緩存SQL模式。
一旦準備好使用所有配置和存儲庫,我們只需要在Spring應用程序上下文中注冊配置即可。
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);}} }上面的代碼片段非常簡單。 首先,我們創建一個Spring注釋的上下文并注冊我們的存儲庫。 接下來,我們獲得對BreedRepository和DogRepository的引用以插入一些數據。 要查詢數據,我們使用基本的CRUD操作或方法,這些操作或方法將自動轉換為Apache Ignite SQL查詢:
List<Dog> dogs = dogRepository.getDogByName("dina"); for(Dog dog : dogs){System.out.println("Dog:"+ dog); }讓我們構建并運行該應用程序。 執行以下命令。
mvn clean install mvn exec:java -Dexec.mainClass=com.blu.imdg.App您應該在控制臺中找到很多日志消息。
日志消息確認兩個條目(dina和colle-collie)已刷新到Ignite緩存中,并從緩存中檢索了狗Dina 。 讓我們通過Ignite Visor探索緩存。
已為實體創建了兩個不同的緩存:“品種”和“狗”。 如果我們掃描Dog緩存的緩存條目,則應在其上找到以下實體。
實體Dina已使用Breed牧羊犬的鑰匙保存在緩存中。
如果要了解有關Apache Ignite的更多信息(使用JPA,Hibernate或MyBatis),請參閱《 使用Apache Ignite進行高性能內存計算 》一書。
翻譯自: https://www.javacodegeeks.com/2017/07/apache-ignite-spring-data.html
apache ignite
總結
以上是生活随笔為你收集整理的apache ignite_使用Spring Data的Apache Ignite的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 家访登记表家访内容(家访备案表)
- 下一篇: 极路由ddns(极路由ddos)