让我们有两个不同的ReactiveMongoRepository
mongo存储库:
@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);
}
在此之后,它应该可以正常工作。