spring - 获取 Mono 的结果以便将其传递到 JpaRepository 或另一个非反应类
问题描述
我想知道从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();
}
}
如何改进?有人可以建议吗?
解决方案
更好的方法是这样的:
public Mono<Void> signUp(Mono<Account> accountMono) {
//Account is a Jpa entity
return accountMono.flatMap(account -> {
accountService.signUp(account);
return Mono.empty();
});
}
这样你就可以遵循 Reactive Streams 的要求,并且不会用你的阻塞代码来打扰执行流程。另外,根据 Spring WebFlux 的要求,您无需在自己的代码中订阅,而是将所有内容都交给容器,该容器是Mono<Account>
. 当 Web (Reactive) 容器中有足够的资源订阅返回的Mono
.
推荐阅读
- pytorch - 在 Pytorch Lightening 训练期间切换模型
- css - 使用 CSS 构建时间线
- python - 动态获取标准库 python 包名称列表
- webpack - webpack dev server 监视多个静态文件
- javascript - 在以下代码中在 JavaScript 中实现工厂模式的正确方法
- rust - 为给定的主机操作系统设置默认目标
- ios - SwiftUI:如何计算文本视图的宽度?
- sql - 从excel插入Oracle表
- php - 如何仅显示类别和标签的所有 WP 分类法?
- function - 传入的 int 在具有 int 参数的函数中未定义(Golang)