代码之家  ›  专栏  ›  技术社区  ›  balteo

获取一个单声道的结果,以便将其传递给一个JpaRepository或另一个非反应类

  •  1
  • balteo  · 技术社区  · 6 年前

    Mono Flux )传递给非反应性方法,如 JpaRepository .

    我是这样做的:

    @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 回复  |  直到 6 年前
        1
  •  1
  •   Artem Bilan    6 年前

    更好的方法是:

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

    通过这种方式,您可以遵循反应流的要求,而不必使用阻塞代码来干扰执行流。另外,根据springwebflux的要求,您不需要在自己的代码中订阅,而是将所有内容都提交给发起程序的容器 Mono<Account> Mono .