Apache Ignite mit Spring Data

Apache Ignite mit Spring Data

1. Überblick

In dieser Kurzanleitung konzentrieren wir uns aufhow to integrate the Spring Data API with the Apache Ignite platform.

Informationen zu Apache Ignite finden Sie unterour previous guide.

2. Maven Setup

Zusätzlich zu den vorhandenen Abhängigkeiten müssen wir die Unterstützung für Spring Data aktivieren:


    org.apache.ignite
    ignite-spring-data
    ${ignite.version}

Das Artefaktignite-spring-data kann vonMaven Central heruntergeladen werden.

3. Modell und Repository

Um die Integration zu demonstrieren, erstellen wir eine Anwendung, dieemployees mithilfe einer Spring Data-API im Ignite-Cache speichert.

Das POJO derEmployeeDTO sieht folgendermaßen aus:

public class EmployeeDTO implements Serializable {

    @QuerySqlField(index = true)
    private Integer id;

    @QuerySqlField(index = true)
    private String name;

    @QuerySqlField(index = true)
    private boolean isEmployed;

    // getters, setters
}

Hier ermöglicht die Annotation@QuerySqlFielddie Abfrage der Felder mit SQL.

Als Nächstes erstellen wir das Repository, um die Objekte vonEmployeebeizubehalten:

@RepositoryConfig(cacheName = "exampleCache")
public interface EmployeeRepository
  extends IgniteRepository {
    EmployeeDTO getEmployeeDTOById(Integer id);
}

Apache Ignite uses its own IgniteRepository which extends from Spring Data’s CrudRepository. Ermöglicht auch den Zugriff auf das SQL-Raster von Spring Data. 

Dies unterstützt Standard-CRUD-Methoden, mit Ausnahme einiger weniger, für die keine ID erforderlich ist. In unserem Testabschnitt werden wir uns genauer ansehen, warum.

Die Annotation vonThe @RepositoryConfigordnet dieEmployeeRepository denexampleCache von Ignite zu.

4. Federkonfiguration

Erstellen wir jetzt unsere Spring-Konfigurationsklasse.

Wir werden die Annotation@EnableIgniteRepositoriesverwenden, um Unterstützung für Ignite-Repositorys hinzuzufügen:

@Configuration
@EnableIgniteRepositories
public class SpringDataConfig {

    @Bean
    public Ignite igniteInstance() {
        IgniteConfiguration config = new IgniteConfiguration();

        CacheConfiguration cache = new CacheConfiguration("exampleCache");
        cache.setIndexedTypes(Integer.class, EmployeeDTO.class);

        config.setCacheConfiguration(cache);
        return Ignition.start(config);
    }
}

Hier erstellt die MethodeigniteInstance() die InstanzIgniteund übergibt sie anIgniteRepositoryFactoryBean, um Zugriff auf den Apache Ignite-Cluster zu erhalten.

Wir haben auch die Konfiguration vonexampleCachedefiniert und festgelegt. Die MethodesetIndexedTypes() legt das SQL-Schema für den Cache fest.

5. Repository testen

Um die Anwendung zu testen, registrieren wir dieSpringDataConfiguration im Anwendungskontext und erhalten dieEmployeeRepository daraus:

AnnotationConfigApplicationContext context
 = new AnnotationConfigApplicationContext();
context.register(SpringDataConfig.class);
context.refresh();

EmployeeRepository repository = context.getBean(EmployeeRepository.class);

Dann wollen wir die Instanz vonEmployeeDTOerstellen und im Cache speichern:

EmployeeDTO employeeDTO = new EmployeeDTO();
employeeDTO.setId(1);
employeeDTO.setName("John");
employeeDTO.setEmployed(true);

repository.save(employeeDTO.getId(), employeeDTO);

Hier haben wir diesave(key, value)-Methode vonIgniteRepository verwendet. Der Grund dafür ist, dassthe standard CrudRepository save(entity), save(entities), delete(entity) operations aren’t supported yet.

Das Problem dahinter ist, dass die von derCrudRepository.save()-Methode generierten IDs im Cluster nicht eindeutig sind.

Stattdessen müssen wir diesave(key, value), save(Map<ID, Entity> values), deleteAll(Iterable<ID> ids)-Methoden verwenden.

Anschließend können wir das Mitarbeiterobjekt mithilfe dergetEmployeeDTOById()-Methode von Spring Data aus dem Cache abrufen:

EmployeeDTO employee = repository.getEmployeeDTOById(employeeDTO.getId());
System.out.println(employee);

Die Ausgabe zeigt, dass das ursprüngliche Objekt erfolgreich abgerufen wurde:

EmployeeDTO{id=1, name='John', isEmployed=true}

Alternativ können wir dasselbe Objekt mithilfe derIgniteCache-API abrufen:

IgniteCache cache = ignite.cache("exampleCache");
EmployeeDTO employeeDTO = cache.get(employeeId);

Oder mit dem Standard-SQL:

SqlFieldsQuery sql = new SqlFieldsQuery(
  "select * from EmployeeDTO where isEmployed = 'true'");

6. Zusammenfassung

Dieses kurze Tutorial zeigt, wie Sie das Spring Data Framework in das Apache Ignite-Projekt integrieren. Mit Hilfe des praktischen Beispiels wirdwe learned to work with the Apache Ignite cache by using the Spring Data API.

Wie üblich ist der vollständige Code für diesen Artikel inGitHub project verfügbar.