Я разрабатываю веб-приложение с Spring Boot и MongoDB. Я хочу, чтобы службы работали с аннотацией @transactional spring, но я не знаю, действительно ли это работает. (Раньше я не работал с mongoDB).
Я добавил аннотацию, и кажется, что все работает нормально (приложение работает, и я могу выполнять все операции CRUD), но я не знаю, игнорирует ли Spring аннотацию и работает как обычно, или действительно учитывает транзакцию .
В другом посте я видел, что должен добавить новый bean-компонент в класс конфигурации, чтобы включить транзакцию между Spring и MongoDB. Это действительно необходимо? Я использую транзакции только с отдельными документами Mongo.
@ Turing85, который не работает с весенней загрузкой. Если я создам bean-компонент transactionManager, я не смогу импортировать тип MongoTransactionManager. Этот тип находится в библиотеке «spring-data-mongodb», а я использую «spring-boot-starter-data-mongodb». Если я добавлю в проект первую зависимость, исключение ClassNotFoundException будет выполнено.




@Transactional работает только с spring-data-mongodb версии 2.1.0 и выше: https://docs.spring.io/spring-data/mongodb/docs/2.1.0.RELEASE/api/
Действительно, вы должны добавить bean:
@Bean
MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}
Я не знаю, игнорирует ли Spring аннотацию и работает как обычно, или действительно учитывает транзакцию.
Для этого можно выкинуть исключение между двумя обновлениями БД и проверить, не откатилось ли первое обновление.
Но если вы используете транзакции в одном документе Mongo, вам не нужна аннотация @Transactional:
In MongoDB, a write operation is atomic on the level of a single document, even if the operation modifies multiple embedded documents within a single document. MongoDb documentation - Transactions
Я рекомендую ArithmeticException: / нулем, между 2 вставками db. получилось проверить операцию отката. MongoDbFactory устарела, теперь используйте MongoDatabaseFactory
Для интеграции mongoDB и Spring в реактивном стиле ответ, который я предоставил здесь, может быть полезен людям.
MongoTransactionManager(внешняя ссылка)