Apache Ignite com Spring Data

Apache Ignite com Spring Data

1. Visão geral

Neste guia rápido, vamos nos concentrar emhow to integrate the Spring Data API with the Apache Ignite platform.

Para saber mais sobre o Apache Ignite, verifiqueour previous guide.

2. Configuração do Maven

Além das dependências existentes, precisamos habilitar o suporte ao Spring Data:


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

O artefatoignite-spring-data pode ser baixado deMaven Central.

3. Modelo e Repositório

Para demonstrar a integração, construiremos um aplicativo que armazenaemployees no cache do Ignite usando uma API Spring Data.

O POJO deEmployeeDTO ficará assim:

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
}

Aqui, a anotação@QuerySqlField permite consultar os campos usando SQL.

A seguir, criaremos o repositório para manter os objetosEmployee:

@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. Também permite o acesso à grade SQL do Spring Data. 

Isso suporta métodos CRUD padrão, exceto alguns que não requerem um id. Veremos o motivo com mais detalhes em nossa seção de teste.

A anotaçãoThe @RepositoryConfig mapeiaEmployeeRepository paraexampleCache do Ignite.

4. Configuração da mola

Vamos agora criar nossa classe de configuração Spring.

Usaremos a anotação@EnableIgniteRepositories para adicionar suporte para repositórios 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);
    }
}

Aqui, o métodoigniteInstance() cria e passa a instânciaIgnite paraIgniteRepositoryFactoryBean para obter acesso ao cluster Apache Ignite.

Também definimos e configuramos a configuração deexampleCache. O métodosetIndexedTypes() define o esquema SQL para o cache.

5. Testando o Repositório

Para testar o aplicativo, vamos registrarSpringDataConfiguration no contexto do aplicativo e obterEmployeeRepository dele:

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

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

Então, queremos criar a instânciaEmployeeDTO e salvá-la no cache:

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

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

Aqui usamos o métodosave(key, value) deIgniteRepository. A razão para isso é quethe standard CrudRepository save(entity), save(entities), delete(entity) operations aren’t supported yet.

O problema por trás disso é que os IDs gerados pelo métodoCrudRepository.save() não são exclusivos no cluster.

Em vez disso, temos que usar os métodossave(key, value), save(Map<ID, Entity> values), deleteAll(Iterable<ID> ids).

Depois, podemos obter o objeto funcionário do cache usando o métodogetEmployeeDTOById() do Spring Data:

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

A saída mostra que buscamos com sucesso o objeto inicial:

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

Como alternativa, podemos recuperar o mesmo objeto usando a APIIgniteCache:

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

Ou usando o SQL padrão:

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

6. Sumário

Este breve tutorial mostra como integrar o Spring Data Framework ao projeto Apache Ignite. Com a ajuda do exemplo prático,we learned to work with the Apache Ignite cache by using the Spring Data API.

Como de costume, o código completo para este artigo está disponível emGitHub project.