事务

解释 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 上下文。

© 2026 Byeolnaerim. 保留所有权利.介绍隐私政策