出于性能原因,我需要减少 tx 范围。例如
reactiveMongoTemplate.save(a)
.then(
reactiveMongoTemplate.inTransaction().execute(rmo -> methodInTx(rmo, trade))
)
.subscibe()
save(a) 不参与交易
ReactiveMongoTemplate.inTransaction() 自 2.2 起已弃用。
我试过 TransactionalOperator,它似乎不支持作用域事务
mongo.setSessionSynchronization(SessionSynchronization.ON_ACTUAL_TRANSACTION);
txMongo.setSessionSynchronization(SessionSynchronization.ALWAYS);
mongo.save(a, A.class)
.flatMap(aa -> {
aa.value = 1;
return mongo.save(aa);
})
.flatMap(aa -> {
aa.value = 2;
return txMongo.save(aa).map(aaa -> {
if (true) throw new RuntimeException();
return aaa;
});
})
.as(transactionalOperator::transactional)
.doOnError(e -> e.printStackTrace()).subscribe();
我希望值设置为 1,只有 2 回滚。但是似乎transationalOperater从一开始就开始了事务,带有会话同步ON_ACTUAL_TRANSACTION的mongo也参与了事务。如何限制 tx 范围?