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:
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");
}
}
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:
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com :23456/prueba
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
:
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
spring:
data:
mongodb:
host: "mongoserver.example.com"
port: 27017
database: "test"
username: "user"
password: "secret"
spring.data.mongodb.port
, se utiliza el
valor predeterminado 27017
. Puede eliminar esta línea del ejemplo mostrado anteriormente.
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
.
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:
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");
}
}
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:
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")
}
}
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?
}
@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.
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 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
.
GO TO FULL VERSION