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 мы можем создать приложение с нашей настраиваемой схемой базы данных без регистрации. После этого исполняемый исходный код нашего приложения доступен для прямой загрузки.