问题描述
我有一个存储库调用,它将给我Mono。
例如:
private User getUserData (User user)
{
Mono<User> monoUser=userRepository.insert(user);
User user= monoUser.block;
return user;
}
如何在不阻碍弹簧反应性的情况下实现这一目标。我不想做monoUser.block来获取User对象。
获取userObject之后,我需要通过Mapstruct将id转换为UserId。此外,我想实现这一目标而不会阻塞,以便使用响应式功能。
解决方法
使用Mono
可以执行许多操作,而不用调用block
,这些操作不会阻塞。您可以做的一件事是将Consumer
附加到Mono
的操作成功完成时调用。用于执行此操作的方法的签名(在Mono
上)是:
Mono<T> doOnSuccess(Consumer<? super T> onSuccess)
这样您就可以继续工作,并在操作完成后致电您的消费者。添加用户后,该调用将启动您想要执行的任何操作。
您将代码放入写入数据库的Consumer
中。如果该对象需要信息(例如要写入数据库的句柄),则可以在构造对象时将其传递给doOnSuccess
调用之前,将该信息传递给该对象。 -