Um dos benefícios do Spring Data é a integração com diversos conceitos de provedores de dados, ou seja, o framework não se limite apenas aos padrões Java JPA e JDBC o Spring Data possui diversos módulos de integração com tecnologias como: MongoDB, Redis, Cassandra, entre outros, além de módulos estendidos pela comunicado como Elasticsearch e DynamoDB. Com isso, esse post tem como objetivo como utilizar o Spring Data para persitência de arquivos no MongoDB.
O primeiro passo é criar a base no MongoDB.
use arquivo-processamento
Em seguida, criar a collection para armazenar as informações dos arquivos.
db.createCollection("arquivo")
Após criado as estruturas de dados no MongoDB é preciso configurar os acessos no application.properties para o Spring Boot ajustar acessar o MongoDB.
spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=arquivo-processamento
Por padrão, o Spring Boot não tem acesso as funcionalidades do Spring Data e MongoDB, dessa forma, é preciso adicionar a seguinte dependência:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> <version>1.5.2.RELEASE</version> </dependency>
Posterior as configurações, o projeto está pronto para utilizar os recursos do Spring Data em conjunto com MongoDB.
O Mapeamento de entidade é similar ao mapeamento do JPA, onde ao invés de @Table é utilizado o @Document e da mesma forma que o JPA, também é preciso definir um id para a classe de modelo.
import lombok.Getter; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "arquivo") @Getter public class Arquivo { @Id private String id; private String data; private String nome; private String conteudo; public Arquivo(String nome, String conteudo) { this.nome = nome; this.conteudo = conteudo; this.data = LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")); } }
Na camada repository também é similar ao JPA, onde o Spring Data disponibiliza uma interface MongoRepository com os principais métodos como: findAll, save, insert, entre outros.
import org.springframework.data.mongodb.repository.MongoRepository; public interface ArquivoRepository extends MongoRepository<Arquivo, String> { }
Já no Service, não há nada de novo é a implementação padrão no contexto Spring.
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class ArquivoService { @Autowired private ArquivoRepository arquivoRepository; public void salvar(String nome, String conteudo) { arquivoRepository.save(new Arquivo(nome, conteudo)); } public List<Arquivo> findAll() { return arquivoRepository.findAll(); } public long count() { return arquivoRepository.count(); } public Arquivo findById(String id) { return arquivoRepository.findOne(id); } public void delete(String id) { arquivoRepository.delete(id); } }
Dessa forma, o Spring Data traz uma abstração de implementações que já estamos acostumados no JPA para outros conceitos de base de dados, assim demonstrado no post, a facilidade de utilizar MongoDB utilizando os recursos do Spring Boot e Spring Data.
Abaixo, um exemplo da migração de uma funcionalidade processamento de arquivo utilizando client do MongoDB para a utilização do Spring data:
https://github.com/emmanuelneri/solucao-processamento-arquivo/commit/54517c7ccdf54f097c7158a14b15f9ff0d5f76b4
Esse post me salvou, obrigado.
CurtirCurtido por 1 pessoa
Fico feliz em saber que o post ajudou!! Valeu!
CurtirCurtir
Excelente post, simples e objetivo, obrigado! 😀
CurtirCurtido por 1 pessoa
Eu que agradeço! Obrigado
CurtirCurtir