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: 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
автоматично додає до конфігурації бін для впровадження шаблону таким чином:
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
.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ