Как включить embedded MongoDB в Reactive Spring Boot через Gradle

Embedded MongoDB в Reactive Spring Boot чаще используют для тестов, а не для production. Идея такая: приложение работает с reactive MongoDB через Spring Data, а на время тестов поднимается временный MongoDB-процесс или тестовая база. Запускать это можно через ./gradlew test

Для reactive MongoDB в Gradle нужен стартер:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

Дальше нужен способ поднять тестовую MongoDB. В современных проектах часто выбирают Testcontainers. Если нужен именно embedded-подход, смотрят в сторону Flapdoodle Embedded MongoDB и версии, совместимой с вашим Spring Boot

Проверка reactive repository

Пример документа:

@Document("products")
public class Product {
    @Id
    private String id;
    private String title;
}

Repository:

public interface ProductRepository
        extends ReactiveMongoRepository<Product, String> {
}

Тест должен запускаться через:

./gradlew test

Если тесты видят MongoDB и repository сохраняет документ, связка работает

application-test.yml

Для тестов удобно держать отдельный профиль:

spring:
  data:
    mongodb:
      database: testdb

Если embedded-библиотека сама поднимает MongoDB на динамическом порту, не прописывайте жесткий production URI в тестовом профиле. Иначе тесты могут случайно подключиться не туда

Что важно проверить

Проверьте совместимость версий Spring Boot, Spring Data MongoDB и embedded-библиотеки. Если Gradle скачал зависимость, это еще не означает, что embedded MongoDB корректно стартует на вашей Java и вашей системе

Минимальный тест:

@SpringBootTest
@ActiveProfiles("test")
class ProductRepositoryTest {
    @Autowired
    ProductRepository repository;

    @Test
    void savesProduct() {
        StepVerifier.create(repository.save(new Product("Худи")))
            .expectNextCount(1)
            .verifyComplete();
    }
}

Для реального кода добавьте конструктор и поля по правилам вашего проекта

Если нужен надежный вариант

Для командной разработки часто проще использовать Testcontainers: он поднимает настоящую MongoDB в Docker и меньше зависит от особенностей embedded-пакета. Embedded MongoDB удобна, когда Docker недоступен или нужен максимально легкий локальный тест, но версии там нужно подбирать внимательнее

Как запускать через gradlew

После настройки зависимостей и тестового профиля запустите:

./gradlew clean test

Если проект на Windows:

gradlew.bat clean test

Смотрите не только факт прохождения теста, но и лог старта MongoDB. Если тесты проходят только при запущенной локальной базе, значит embedded-настройка не сработала и приложение подключается к внешнему серверу

Частые ошибки

Добавили обычный MongoDB starter вместо reactive

Тест подключается к рабочей базе

Используйте отдельный профиль и тестовую базу

Не совпали версии

Если embedded MongoDB не стартует, проверьте совместимость библиотеки, Java и Spring Boot

Ждут production-базу от embedded

Embedded MongoDB — инструмент для тестов. Для рабочей среды используйте обычный MongoDB Server или Atlas

Не разделяют профили

Production-настройки и тестовую базу держите в разных профилях. Это снижает риск случайно запустить тесты против реальной базы

Что почитать дальше по MongoDB

Если нужен общий маршрут по теме, откройте рубрику MongoDB. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x