MongoDB – это документная база данных NoSQL с открытым исходным кодом, которая использует JSON-подобную схему вместо традиционных реляционных данных, основанных на таблицах. Spring Boot содержит несколько вспомогательных средств для работы с MongoDB, включая "стартеры" spring-boot-starter-data-mongodb
и spring-boot-starter-data-mongodb-reactive
.
Подключение к базе данных MongoDB
Для доступа к базам данных MongoDB можно внедрить автоконфигурируемую org.springframework.data.mongodb.MongoDatabaseFactory
. По умолчанию экземпляр будет пытаться подключиться к серверу MongoDB по адресу mongodb://localhost/test
. В следующем примере показано, как происходит подключение к базе данных MongoDB:
@Component
public class MyBean {
private final MongoDatabaseFactory mongo;
public MyBean(MongoDatabaseFactory mongo) {
this.mongo = mongo;
}
}
@Component
class MyBean(private val mongo: MongoDatabaseFactory) {
}
Если был определен собственный MongoClient
, он будет использоваться для автоконфигурирования подходящей MongoDatabaseFactory
.
Автоконфигурируемый MongoClient
создается с помощью бина MongoClientSettings
. Если был определен собственный MongoClientSettings
, он будет использоваться без изменений, а свойства spring.data.mongodb
будут проигнорированы. В противном случае MongoClientSettings
будет автоматически сконфигурирован и к нему будут применены свойства spring.data.mongodb
. В любом случае, можно объявить один или несколько бинов MongoClientSettingsBuilderCustomizer
для более тонкой настройки конфигурации MongoClientSettings
. Каждый из них будет вызываться по порядку через MongoClientSettings.Builder
, который используется для построения MongoClientSettings
.
Можно установить свойство spring.data.mongodb.uri
, чтобы изменить URL-адрес и добавить в конфигурацию дополнительные параметры, такие как набор реплик, как показано в следующем примере:
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test
spring:
data:
mongodb:
uri: "mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test"
В качестве альтернативы можно задать детали соединения с помощью дискретных свойств. Например, можно объявить следующие параметры в файле 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
не задан, используется значение по умолчанию 27017
. Можно удалить эту строку из примера, показанного ранее.MongoClient
вместо использования MongoDatabaseFactory
. Если необходимо полностью контролировать процесс установления соединения с MongoDB, можно дополнительно объявить свой собственный бин MongoDatabaseFactory
или MongoClient
.MongoTemplate
Spring Data MongoDB> предусматривает класс MongoTemplate
, который по своей структуре очень похож на JdbcTemplate
из Spring. Как и в случае с JdbcTemplate
, Spring Boot автоматически добавляет в конфигурацию бин для внедрения шаблона следующим образом:
@Component
public class MyBean {
private final MongoTemplate mongoTemplate;
public MyBean(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
}
@Component
class MyBean(private val mongoTemplate: MongoTemplate) {
}
Репозитории Spring Data MongoDB
Spring Data содержит средства поддержки репозиториев для MongoDB. Как и в случае с репозиториями для JPA, рассмотренными ранее, основной принцип заключается в том, что запросы строятся автоматически, на основе имен методов.
Фактически, и Spring Data JPA, и Spring Data MongoDB имеют одну и ту же общую инфраструктуру. Можно взять пример для JPA из предыдущей статьи и, при условии, что City
теперь является классом данных MongoDB, а не JPA-объектом с аннотацией @Entity
, он будет работать точно так же, как показано в следующем примере:
public interface CityRepository extends Repository<City, Long> {
Page<City> findAll(Pageable pageable);
City findByNameAndStateAllIgnoringCase(String name, String state);
}
interface CityRepository :
Repository<City?, Long?> {
fun findAll(pageable: Pageable?): Page<City?>?
fun findByNameAndStateAllIgnoringCase(name: String?, state: String?): City?
}
@EntityScan
.Встраиваемая система Mongo
Spring Boot предусматривает автоматическую конфигурацию для встраиваемой системы Mongo. Чтобы использовать его в своем приложении Spring Boot, добавьте зависимость от de.flapdoodle.embed:de.flapdoodle.embed.mongo
и установите свойство spring.mongodb.embedded.version
в соответствии с версией MongoDB, которую приложение будет использовать в производственном окружении.
DownloadConfigBuilderCustomizer
.Порт, который прослушивается Mongo, можно добавить в конфигурацию, установив свойство spring.data.mongodb.port
. Для использования свободного порта, назначенного случайным образом, используйте значение 0. MongoClient
, созданный с помощью MongoAutoConfiguration
, автоматически конфигурируется на использование порта, назначенного случайным образом.
Если в classpath находится SLF4J, выводимые данные, созданные Mongo, автоматически маршрутизируются в диспетчер журналирования с именем org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo
.
Можно объявить собственные бины IMongodConfig
и IRuntimeConfig
, чтобы управлять конфигурацией экземпляра Mongo и маршрутизацией журналирования. Конфигурацию загрузки можно настроить путем объявления бина DownloadConfigBuilderCustomizer
.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ