事務

解釋 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 交易的邊界。

Spring @Transactional / TransactionalOperator。

由 Spring Data MongoDB 管理的交易/會話邊界。

ReactiveMongoDsl#getTxJob。

DSL 直接啟動 ClientSession 並傳遞到 Reactor 上下文。

© 2026 Byeolnaerim. 版權所有。介紹隱私政策