MongoDB

Módulo 5. Spring
Nivel 17 , Lección 5
Disponible

MongoDB es una base de datos de documentos NoSQL de código abierto que utiliza un esquema similar a JSON en lugar de tablas relacionales tradicionales basadas en datos. Spring Boot contiene varios asistentes para trabajar con MongoDB, incluidos los iniciadores spring-boot-starter-data-mongodb y spring-boot-starter-data-mongodb-reactive.

Conectarse a una base de datos MongoDB

Para acceder a las bases de datos MongoDB, puede implementar un org.springframework.data.mongodb.MongoDatabaseFactory autoconfigurable. De forma predeterminada, la instancia intentará conectarse al servidor MongoDB en mongodb://localhost/test. El siguiente ejemplo muestra cómo conectarse a una base de datos MongoDB:

Java

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
    private final MongoDatabaseFactory mongo;
    public MyBean(MongoDatabaseFactory mongo) {
        this.mongo = mongo;
    }
    // ...
    public MongoCollection<Document> someMethod() {
        MongoDatabase db = this.mongo.getMongoDatabase();
        return db.getCollection("users");
    }
}
            
Kotlin

import com.mongodb.client.MongoCollection
import org.bson.Document
import org.springframework.data.mongodb.MongoDatabaseFactory
import org.springframework.stereotype.Component
@Component
class MyBean(private val mongo: MongoDatabaseFactory) {
    // ...
    fun someMethod(): MongoCollection<Document> {
        val db = mongo.mongoDatabase
        return db.getCollection("users")
    }
}

Si se ha definido un MongoClient personalizado, se utilizará para configurar automáticamente el MongoDatabaseFactory apropiado.

Un elemento configurado automáticamente MongoClient se crea utilizando el bean MongoClientSettings. Si se definió un MongoClientSettings personalizado, se usará tal cual y las propiedades spring.data.mongodb se ignorarán. De lo contrario, MongoClientSettings se configurará automáticamente y se le aplicarán las propiedades de spring.data.mongodb. En cualquier caso, puede declarar uno o más beans MongoClientSettingsBuilderCustomizer para ajustar la configuración de MongoClientSettings. Cada uno de ellos será llamado en orden a través de MongoClientSettings.Builder, que se utiliza para construir MongoClientSettings.

Puedes configurar el propiedad spring.data.mongodb.uri para cambiar la URL y agregar parámetros adicionales a la configuración, como conjunto de réplicas, como se muestra en el siguiente ejemplo:

Propiedades
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com :23456/prueba
Yaml
spring:
    data:
        mongodb:
            uri: "mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test"

Alternativamente, Puede especificar los detalles de la conexión utilizando propiedades discretas. Por ejemplo, puede declarar las siguientes configuraciones en el archivo application.properties:

Propiedades

spring.data.mongodb.host=mongoserver.example.com
spring.data.mongodb.port=27017
spring.data.mongodb.database=test
spring.data.mongodb.username=user
spring.data.mongodb.password=secret 
Yaml
spring:
  data:
    mongodb:
      host: "mongoserver.example.com"
      port: 27017
      database: "test"
      username: "user"
      password: "secret"
Si no se especifica spring.data.mongodb.port, se utiliza el valor predeterminado 27017. Puede eliminar esta línea del ejemplo mostrado anteriormente.
Si no está utilizando Spring Data MongoDB, puede implementar un MongoClient bean en lugar de utilizar MongoDatabaseFactory. Si necesita control total sobre el proceso de establecimiento de una conexión a MongoDB, opcionalmente puede declarar su propio bean MongoDatabaseFactory o MongoClient.
Cuando se utiliza el controlador reactivo, el protocolo SSL requiere el marco Netty. La configuración automática configura esta fábrica automáticamente si el marco Netty está disponible y la fábrica que se está utilizando aún no se ha configurado.

MongoTemplate

Spring Data MongoDB> proporciona un MongoTemplate clase que su estructura es muy similar a JdbcTemplate de Spring. Al igual que con JdbcTemplate, Spring Boot agrega automáticamente un bean de inyección de plantilla a la configuración de la siguiente manera:

Java

import com.mongodb.client.MongoCollection;
import org.bson.Document;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
    private final MongoTemplate mongoTemplate;
    public MyBean(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }
    // ...
    public MongoCollection<Document> someMethod() {
        return this.mongoTemplate.getCollection("users");
    }
}
    
Kotlin

import com.mongodb.client.MongoCollection
import org.bson.Document
import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val mongoTemplate: MongoTemplate) {
    // ...
    fun someMethod(): MongoCollection<Document> {
        return mongoTemplate.getCollection("users")
    }
}
        

Repositorios Spring Data MongoDB

Spring Data proporciona soporte de repositorio para MongoDB. Al igual que con los repositorios JPA discutidos anteriormente, el principio básico es que las consultas se crean automáticamente en función de los nombres de los métodos.

De hecho, tanto Spring Data JPA como Spring Data MongoDB tienen la misma infraestructura general. Puede tomar el ejemplo de JPA del artículo anterior y, siempre que City sea ahora una clase de datos de MongoDB y no un objeto JPA con la anotación @Entity, funcionará exactamente así como se muestra en el siguiente ejemplo:

Java

import com.mongodb.client.MongoCollection
import org.bson.Document
import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val mongoTemplate: MongoTemplate) {
    // ...
    fun someMethod(): MongoCollection<Document> {
        return mongoTemplate.getCollection("users")
    }
}
Kotlin

import org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable
import org.springframework.data.repository.Repository
interface CityRepository :
    Repository<City?, Long?> {
    fun findAll(pageable: Pageable?): Page<City?>?
    fun findByNameAndStateAllIgnoringCase(name: String?, state: String?): City?
}
Puede configurar las ubicaciones de escaneo de documentos utilizando @EntityScan anotación.

Sistema Mongo integrado

Spring Boot proporciona configuración automática para Mongo integrado. Para usarlo en su aplicación Spring Boot, agregue una dependencia en de.flapdoodle.embed:de.flapdoodle.embed.mongo y configure la spring.mongodb.embedded.version propiedad según la versión de MongoDB que utilizará la aplicación en un entorno de producción.

La configuración de arranque predeterminada permite el acceso a la mayoría de las versiones enumeradas en la clase de versión Embedded Mongo, así como algunos otros. La configuración de una versión no disponible generará un error al intentar iniciar el servidor. Este error se puede resolver definiendo un bean DownloadConfigBuilderCustomizer configurado apropiadamente.

El puerto que escucha Mongo se puede agregar a la configuración estableciendo la propiedad spring.data.mongodb.port. Para utilizar un puerto libre asignado aleatoriamente, utilice un valor de 0. MongoClient creado con MongoAutoConfiguration se configura automáticamente para utilizar un puerto asignado aleatoriamente.

Si no configura un puerto personalizado, el soporte nativo se establecerá de forma predeterminada en un puerto aleatorio (en lugar de 27017).

Si SLF4J está en el classpath, los datos de salida creados por Mongo se enrutan automáticamente a un administrador de registro llamado org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo.

Puedes declarar tu propio IMongodConfig beans e IRuntimeConfig para administrar la configuración de la instancia de Mongo y el enrutamiento de registros. La configuración de descarga se puede configurar declarando el bean DownloadConfigBuilderCustomizer.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION