Utilizando MongoDB com Spring Data e Spring Boot

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

Um comentário sobre “Utilizando MongoDB com Spring Data e Spring Boot

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s