使用@Transactional在同一spring事务下调用2个不同的ReactiveMongoRepository



让我们有两个不同的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();
}

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

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

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

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

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

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

最新更新