spring-data-mongodb无显式事务时MongoOperations默认提交行为是怎样的?
Spring Data MongoDB 非事务场景默认提交行为说明
针对你使用Mongo 4.x、spring-data-mongodb 2.2.5.RELEASE版本的场景,相关行为说明如下:
1. 未配置事务、未加@Transactional时的默认行为
此时Spring Data MongoDB不会为MongoOperations的调用开启事务会话,所有操作遵循MongoDB原生的非事务执行逻辑:
- 所有CRUD操作均为独立原子操作,不存在事务层面的批量提交/回滚逻辑,因此日志中不会出现
autocommit相关字段(该字段仅在开启事务会话时才会携带) - 不存在独立的commit操作步骤:每个
MongoOperations发起的操作请求发送到MongoDB服务端执行完成后,变更就立即生效,提交时机和你配置的WriteConcern级别绑定:默认配置下,服务端返回操作成功响应时,数据变更就已经完成提交持久化。 - 批量操作场景下,每个操作的提交完全独立,若中间某个操作执行失败,已经执行完成的操作不会回滚。
2. 和事务场景的差异对比
和你观测到的事务场景日志表现完全匹配:
- 当你显式配置
MongoTransactionManager且调用方法标注@Transactional时,Spring才会开启MongoDB事务会话,请求携带autocommit: false标识 - 所有方法内的操作都在事务会话内暂存,方法正常执行完成后Spring才会发起
commitTransaction指令提交全部变更,方法抛出未捕获异常时则发起abortTransaction回滚所有变更。
内容的提问来源于stack exchange,提问作者Divs
相关产品推荐
相关产品推荐

