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.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ