如何从Mono <User>获取User对象而不用Java阻止它?

问题描述

我有一个存储库调用,它将给我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调用之前,将该信息传递给该对象。 -

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...