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
- application-test.yml
- Что важно проверить
- Если нужен надежный вариант
- Как запускать через gradlew
- Частые ошибки
- Добавили обычный MongoDB starter вместо reactive
- Тест подключается к рабочей базе
- Не совпали версии
- Ждут production-базу от embedded
- Не разделяют профили
- Что почитать дальше по MongoDB
Проверка 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. Для соседних задач пригодятся эти разборы:
- Discord bot на Python и MongoDB: как задать проверку
- Failed to start MongoDB database server: что проверить
- MongoDB Atlas: облачная база для первого проекта
- MongoDB Compass: подключение и первая коллекция без командной строки



