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:
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")
}
}
Якщо було визначено власний 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: 27017f
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 автоматично додає до конфігурації бін для впровадження шаблону таким чином:
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")
}
}
Репозиторії Spring Data MongoDB
Spring Data містить засоби підтримки репозиторіїв для MongoDB. Як і у випадку з репозиторіями для JPA, розглянутими раніше, основний принцип полягає в тому, що запити будуються автоматично, на основі імен методів.
Фактично, і Spring Data JPA, і Spring Data MongoDB мають одну й ту ж загальну інфраструктуру. Можна взяти приклад для JPA з попередньої статті і, за умови що City тепер є класом даних MongoDB, а не JPA-об'єктом з анотацією @Entity, він працюватиме точно так, як показано в наступному прикладі:
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 .
Вбудована система 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.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ