Transações

Explica a transação do MongoDB ClientSession do getTxJob, a propagação de sessão do Reactor Context, a responsabilidade de retry e as fronteiras da transação do 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(...) abre uma ClientSession com MongoExecutionContext.startSession(), inicia a transação e insere o binding da sessão no Contexto Reactor. Em caso de conclusão normal, faz commit; em caso de erro/cancelamento, aborta a transação ativa; e, por fim, fecha a sessão.

Escopo da sessão

A sessão de transação é propagada apenas para a mesma execução DSL com MongoExecutionContext#getSessionScope(). O DriverMongoExecutionContext padrão usa seu próprio MongoClient como escopo de sessão.

A responsabilidade pela repetição da transação é do chamador.

getTxJob(...) não tenta automaticamente repetir erros de transação do MongoDB, como TransientTransactionError. A decisão sobre a repetição e o número de tentativas é feita pela aplicação chamadora, que conhece a idempotência da operação, efeitos colaterais externos e regras de negócios.

Limite com transações Spring.

Spring @Transactional / TransactionalOperator.

Limite de transação/sessão gerenciado pelo Spring Data MongoDB.

ReactiveMongoDsl#getTxJob.

O DSL inicia diretamente o ClientSession e o passa para o Contexto Reactor.

© 2026 Byeolnaerim. Todos os direitos reservados.IntroduçãoPolítica de Privacidade