В настоящее время я изучаю Project Reactor с использованием Spring-WebFlux.
Я создал простой сервис, который будет последовательно вставляться в две коллекции. Во-первых, мой сервис будет вставлен в коллекцию списков, а после этого он будет вставлен в коллекцию деталей. Если обе операции завершатся успешно, он вернет экземпляр первой операции (Вставить в коллекцию списков), если одна из них не удастся, он отменит все изменения, созданные этой операцией до нее.
Вот мой фрагмент:
override fun insert(business: Business): Mono<Business> = businessRepository.save(business)
.doOnSuccess { businezz ->
val businessDetails = businezz.businessDetails
businessDetails!!.idBusiness = businezz.id
businessDetailsService.insert(businessDetails).doOnError {
businessRepository.delete(businezz).subscribe()
}.subscribe()
}
Я чувствую, что это немного грязный способ создать моно. Поскольку вторая операция является блочной операцией. Конечно, я мог бы просто вставить список, затем вставить детали и получить список. Но на самом деле это будет вызывать БД 3 раза, а не 2 раза, как мой код выше.
Можно ли как-нибудь создать неблокирующую операцию и только дважды вызывать БД?
Спасибо.