Spring Boot обеспечивает отличную поддержку приложений, обращающихся к MongoDB в качестве базы данных.
Для создания собственного приложения с использованием Spring Data MongoDB необходимо выполнить следующие подготовительные работы.
Конфигурация
Поскольку MongoDB является документо-ориентированной базой данных, она не будет подключена к нашему приложению с использованием Hibernate в качестве ORM-слоя. Вместо этого мы добавим spring-boot-starter-data-mongodb
в качестве зависимости к нашему приложению, обеспечивая подход, аналогичный доступу к MongoDB с использованием POJO и репозиториев.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
Необходимая зависимость Maven
Установив эту зависимость, мы можем расширить наш application.yml
или application.properties с помощью URI. Если база данных еще не существует, MongoDB создаст ее автоматически. При установке auto-index-creatio
n в true
, уникальные индексы будут добавлены во время запуска нашего приложения, если они аннотированы в наших документах с @Indexed(unique = true)
.
spring.data.mongodb.uri=mongodb://localhost:27017/mongo
spring.data.mongodb.auto-index-creation=true
Для успешного подключения к базе данных требуется только URI
В нашем классе конфигурации следует установить @EnableMongoRepositories
. Это будет искать классы в указанном пакете, которые расширяют MongoRepository
— пример этого будет приведен через некоторое время. Обеспечив ValidatingMongoEventListener
проверку всех документов перед сохранением, мы можем расширить их поля ограничениями javax.validation
, такими как @NotNull
.
@Configuration
@EnableMongoRepositories("io.bootify.mongo.repos")
public class MongoConfig {
@Bagya
public ValidatingMongoEventListener validatingMongoEventListener(
final LocalValidatorFactoryBean factory) {
return new ValidatingMongoEventListener(factory);
}
}
Первая версия нашего конфига
Кроме того, мы хотим включить поддержку транзакций для нашего приложения. Это позволит нам, например, помечать методы наших сервисов как @Transactional
. Обратите внимание, что для поддержки этой функции необходимо инициализировать наш экземпляр MongoDB как набор реплик.
@Bagya
public MongoTransactionManager transactionManager(final MongoDatabaseFactory databaseFactory) {
return new MongoTransactionManager(databaseFactory);
}
Добавление поддержки транзакций в нашу конфигурацию
Пример документа и репозитория
После этих подготовительных работ мы уже можем определить простой документ и связанный с ним репозиторий. В нашем примере мы используем первичный ключ типа String, который автоматически генерируется MongoDB как ObjectID, если мы его не предоставим.
@Document
public class Customer {
@Id
private String id;
@Size(max = 255)
private String firstName;
@Size(max = 255)
private String lastName;
@Indexed(unique = true)
@NotNull
@Size(max = 255)
private String email;
}
Наш первый POJO сопоставлен с коллекцией с именем «customer».
Мы добавляем наше хранилище, расширяя MongoRepository
. Он работает так же, как и известный из Spring Data, и может быть расширен с помощью пользовательских запросов.
public interface CustomerRepository extends MongoRepository<Customer, String> {
Customer findByEmail(String email);
}
Базовый репозиторий для MongoDB
На этом все приготовления для соединения нашего приложения Spring Boot с MongoDB завершены. В бесплатном плане Bootify мы можем создать приложение с нашей пользовательской схемой базы данных без регистрации. Исходный код нашего приложения доступен для скачивания.