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.