事务
解释 getTxJob 的 MongoDB ClientSession 事务、Reactor 上下文会话传播、重试责任和 Spring 事务边界。
getTxJob
java
Mono<String> result = dsl.getTxJob(
MongoTemplateName.FRONT,
() -> dsl
.executeEntity(User.class, MongoTemplateName.FRONT)
.save(user)
.then(
dsl.executeEntity(Audit.class, MongoTemplateName.FRONT)
.save(audit)
)
.thenReturn("committed")
);getTxJob(...) 通过 MongoExecutionContext.startSession() 打开 ClientSession 并开始事务,然后将会话绑定到 Reactor 上下文。正常完成时提交,错误/取消时中止活动事务,最后按顺序关闭会话。
会话范围
事务会话仅在 MongoExecutionContext#getSessionScope() 相同的 DSL 执行中传播。默认的 DriverMongoExecutionContext 使用自己的 MongoClient 作为会话范围。
事务重试由调用方负责。
getTxJob(...) 不会自动重试 TransientTransactionError 等 MongoDB 事务错误。重试的与否及次数由调用应用程序根据操作的幂等性、外部副作用和业务规则决定。
Spring 事务与 DSL 的边界。
Spring @Transactional / TransactionalOperator。
由 Spring Data MongoDB 管理的事务/会话边界。
ReactiveMongoDsl#getTxJob。
DSL 直接启动 ClientSession 并传递到 Reactor 上下文。