0

让我们有 2 个不同的ReactiveMongoRepositorymongo 存储库:

@Autowired
private CurrencyRepository currencyRepository;

@Autowired
private CurrencyArchiveRepository currencyArchiveRepository;

还有一个 @Transactional 方法,它调用两个存储库,以反应方式链接它们的调用:

@Override
@Transactional
public Mono<Void> delete(final String currencyCode) {
  final CurrencyArchive currencyArchive = buildCurrencyArchive();

  return this.currencyArchiveRepository.save(currencyArchive)
      .flatMap(c -> this.currencyRepository.delete(c.getCode()))
      .then();
}

我想要实现的是在同一个事务下执行 2 个存储库调用,这样,例如,如果.delete(...)调用失败,则.save(...)开箱即用地执行先前的回滚。我做了不同的测试,到目前为止我找不到让它工作的方法。

我不知道这是否可能以反应方式进行,只要当执行跳转到平面图块时,它TransactionAspectSupport似乎就丢失了(用调试器检查过)。

你能给我一些关于如何实现这一目标的建议吗?提前致谢

4

1 回答 1

0

默认情况下禁用 Mongo 事务。您必须ReactiveMongoTransactionManager在配置类中注册才能启用它。

@Bean
ReactiveMongoTransactionManager transactionManager(ReactiveDatabaseFactory factory){  
    return new ReactiveMongoTransactionManager(factory);
}

在此之后它应该可以正常工作。

于 2020-12-16T12:36:36.540 回答