【发布时间】:2019-07-31 06:03:38
【问题描述】:
我目前正在学习使用 Spring-WebFlux 的 Project Reactor。
我创建了一个简单的服务,它将按顺序插入到两个集合中。首先,我的服务将插入到列表集合中,然后将插入到详细信息集合中。如果两个操作都成功,它将返回第一个操作的实例(插入到列表集合中),如果其中一个不成功,它将回滚之前的操作创建的所有更改。
这是我的sn-p:
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()
}
我觉得这是一种创建 Mono 的肮脏方式。由于第二个操作是块操作。当然,我可以只做一个插入列表然后插入详细信息然后获取列表。但是,这实际上会调用数据库 3 次,而不是像我上面的代码那样调用 2 次。
有什么方法可以让我创建一个非阻塞操作并且只调用 DB 2 次?
谢谢。
【问题讨论】:
-
嗨,大卫,我删除了 Java 标记,因为您的问题仅使用 Kotlin。
-
谢谢@LppEdd,我想既然Kotlin只是Java的扩展,添加java标签就可以了。下次我会小心的。
标签: spring-boot kotlin spring-data-mongodb spring-webflux