在同一spring事务下使用@transactional调用2个不同的reactivemongorepository

8ljdwjyq  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(440)

让我们有两个不同的 ReactiveMongoRepository mongo存储库:

@Autowired
private CurrencyRepository currencyRepository;

@Autowired
private CurrencyArchiveRepository currencyArchiveRepository;

以及一个@transactional方法,它调用两个存储库,以React式方式链接它们的调用:

@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(...) 从盒子里滚出来。我做了不同的测试,到目前为止我还没有找到一个方法让它工作。
我不知道这是否是可行的React方式,只要执行跳转到flatmap块 TransactionAspectSupport 似乎丢失了(用调试器检查)。
你能给我一些如何实现这一目标的建议吗?提前谢谢

bfhwhh0e

bfhwhh0e1#

默认情况下禁用mongo事务。你必须注册 ReactiveMongoTransactionManager 在config类中启用它。

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

在此之后,它应该是正常工作。

相关问题