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-creation на 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 сопоставлен с коллекцией под названием «клиент»

Мы добавляем наш репозиторий, расширяя MongoRepository. Он работает так же, как и в Spring Data, и может быть расширен с помощью пользовательских запросов.

public interface CustomerRepository extends MongoRepository<Customer, String> {

    Customer findByEmail(String email);

}

Базовый репозиторий для MongoDB

На этом все приготовления для подключения нашего приложения Spring Boot к MongoDB завершены. В бесплатном плане Bootify мы можем создать приложение с нашей настраиваемой схемой базы данных без регистрации. После этого исполняемый исходный код нашего приложения доступен для прямой загрузки.