Apache Ignite avec Spring Data

Apache Ignite avec Spring Data

1. Vue d'ensemble

Dans ce guide rapide, nous allons nous concentrer surhow to integrate the Spring Data API with the Apache Ignite platform.

Pour en savoir plus sur Apache Ignite, consultezour previous guide.

2. Maven Setup

En plus des dépendances existantes, nous devons activer le support Spring Data:


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

L'artefactignite-spring-data peut être téléchargé depuisMaven Central.

3. Modèle et référentiel

Pour démontrer l'intégration, nous allons créer une application qui stockeemployees dans le cache d'Ignite à l'aide d'une API Spring Data.

Le POJO desEmployeeDTO ressemblera à ceci:

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
}

Ici, l'annotation@QuerySqlField permet d'interroger les champs en utilisant SQL.

Ensuite, nous allons créer le référentiel pour conserver les objetsEmployee:

@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. Il permet également d'accéder à la grille SQL à partir de Spring Data. 

Cela prend en charge les méthodes CRUD standard, à l'exception de quelques-unes qui ne nécessitent pas d'identifiant. Nous verrons pourquoi plus en détail dans notre section de test.

L'annotationThe @RepositoryConfig mappe lesEmployeeRepository auxexampleCache d'Ignite.

4. Configuration du ressort

Créons maintenant notre classe de configuration Spring.

Nous utiliserons l'annotation@EnableIgniteRepositories pour ajouter la prise en charge des dépôts Ignite:

@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);
    }
}

Ici, la méthodeigniteInstance() crée et transmet l'instanceIgnite àIgniteRepositoryFactoryBean afin d'accéder au cluster Apache Ignite.

Nous avons également défini et défini la configuration deexampleCache. La méthodesetIndexedTypes() définit le schéma SQL du cache.

5. Test du référentiel

Pour tester l'application, enregistrons lesSpringDataConfiguration dans le contexte de l'application et récupérons lesEmployeeRepository à partir de celui-ci:

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

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

Ensuite, nous voulons créer l'instanceEmployeeDTO et la sauvegarder dans le cache:

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

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

Ici, nous avons utilisé la méthodesave(key, value) deIgniteRepository. La raison en est quethe standard CrudRepository save(entity), save(entities), delete(entity) operations aren’t supported yet.

Le problème derrière cela est que les ID générés par la méthodeCrudRepository.save() ne sont pas uniques dans le cluster.

Au lieu de cela, nous devons utiliser les méthodessave(key, value), save(Map<ID, Entity> values), deleteAll(Iterable<ID> ids).

Ensuite, nous pouvons récupérer l'objet employé à partir du cache en utilisant la méthodegetEmployeeDTOById() de Spring Data:

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

La sortie montre que nous avons récupéré avec succès l'objet initial:

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

Alternativement, nous pouvons récupérer le même objet en utilisant l'APIIgniteCache:

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

Ou en utilisant le SQL standard:

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

6. Sommaire

Ce court tutoriel montre comment intégrer Spring Data Framework au projet Apache Ignite. À l'aide de l'exemple pratique,we learned to work with the Apache Ignite cache by using the Spring Data API.

Comme d'habitude, le code complet de cet article est disponible dans lesGitHub project.