当前位置: 首页 > 知识库问答 >
问题:

获取 Mono 的结果,以便将其传递到 Jpa 存储库或其他非反应式类

孙莫希
2023-03-14

我想知道从 Mono(或 Flux)获取对象以传递到非反应性方法(如 Jpa 存储库)的适当方法是什么。

这是我这样做的方式:

@Service
public class ReactiveAccountService {

    //AccountService's methods take non-mono/non-flux objects as arguments
    private AccountService accountService;

    public ReactiveAccountService(AccountService accountService) {
        this.accountService = accountService;
    }

    public Mono<Void> signUp(Mono<Account> accountMono) {
        //Account is a Jpa entity
        accountMono.subscribe(account -> accountService.signUp(account));
        return Mono.empty();
    }

}

这怎么改善?有人能建议一下吗?

共有1个答案

柳奇思
2023-03-14

更好的方法是这样的:

public Mono<Void> signUp(Mono<Account> accountMono) {
    //Account is a Jpa entity
    return accountMono.flatMap(account -> {
                  accountService.signUp(account);
                  return Mono.empty();
              });
}

通过这种方式,您可以遵循反应式流的要求,并且不会使用阻止代码来打扰执行流。另外,根据Spring WebFlux的要求,您不会订阅自己的代码,而是将所有内容都交给容器,该容器是该Mono的发起者

 类似资料:
  • 问题内容: 我正在使用。 我可以获取文档的每个模型和属性。但我想获取文档ID。 我尝试使用自动提示,但是没有文档ID或名称 我有以下DealsHolder类。这是在科特林。但是所有其他类都在java中。 我在onCreate()中初始化的以下函数 我想在holder.itemView onClickListener中获取文档ID,以便传递给另一个活动 然后是以下DealsHolder。 问题答案:

  • 我在一个组件中有一个按钮,单击我想转到另一个组件并将状态传递给该组件。 是这样的: 但它不起作用。单击“我去添加新问题url”,但组件AddNewQuestionPage不会呈现。若我不把路线放在AddQuestions组件中,而是放在应用程序组件中,它就可以工作。它是整个应用程序的主要组件,使用Switch,还设置了其他路由。 但是,如果状态问题是从应用程序组件呈现的,我不知道如何将其传递给Ad

  • 我尝试创建一些基于反应式堆栈(反应器WebFlux)的基本Spring 5应用程序。 我的下一个目标是实现能够: 保存书籍。 查找所有图书。 我的存储库需要涵盖以下场景: 方案 A: 没有人订阅FindAll 有人保存了一本书(id=1) Client1订阅FindAll 书籍(id=1)被推送到Client1(Client1保持订阅状态,流未完成!) 有人保存了一本书(id=2) 书籍(id=2

  • 我试图使用查询特定的产品类型和大小(两个diff表中的列),从以下所有表中获取数据<我无法得到想要的结果,所以一些指导将非常有用。 请在下面找到我迄今为止尝试过的细节。 PK:主键,FK:外键 以下是表结构,下面的表(提到)映射到另一个表。 实体类: 存储库: 我使用了以下查询(一个接一个),基于prod_类型和大小,我需要从所有表中获取数据。 注:尺寸不是表MC\U产品类型的一部分。数据团队已告

  • 首先,我知道NOSQL系统没有JOIN。但是我知道有一种方法可以获取具有另一个表值的数据。 关于我的应用程序:此应用程序是基本社交网络应用程序。人们可以共享照片。这些帖子保存的firebase数据库“实时数据库”不是云firestore,而是一个时间轴页面。此页面显示共享帖子。我需要显示发布者信息的帖子。 我需要删除Posts表中的displayName,而不是在kullanici表中获取isim