从 Spring Web Reactive Framework 中的 Flux 中检索 Java.Util.List
Retrieve a Java.Util.List from a Flux in Spring Web Reactive Framework
我有一个端点应该使用 Excel 实用程序 class 获取 excel 文档,该实用程序需要 Java.Util.List.
我正在使用 Mongodb 获取数据,但是 Mongodb return 是一个 Flux myList。
我如何"give" Excel实用程序 class 列表 myList 生成我可以 return 在 ResponseEntity 中的工作簿 class?
到目前为止我有这个代码:
final Workbook myWorkBook = ExcelUtils
.pojo2xlsx(this.myMongoRepository.findAll()
.toStream().collect(Collectors.toList()),
MyType.class);
方法 myMongoRepository.findAll return 是一个 Flux < MyType >。这是一个标准的 ReactiveMongoRepository 接口。
我想问题归结为我需要 "block" 流来获取列表,以便我的自定义 Excel 服务可以获取常规列表。我可以在测试代码中做到这一点,但是当在 Web Reactive Framework 中 运行 时,它似乎不允许阻塞。
假设您是从您想要的反应式上下文中调用它
Mono<Workbook> wb = s.collectList().map(l -> ExcelUtils.pojo2xlsx(l));
在这种情况下,您不想自己开始工作或在反应式调度程序管理的线程内造成阻塞。您只需 return 将这个新的 Mono 添加到框架中,让它决定何时以及如何安排工作。
但是,如果您从需要 return 工作簿的普通方法调用它,那么您别无选择,只能阻止,但此同步方法的预期是您将开始工作并且阻塞直到它完成。
我有一个端点应该使用 Excel 实用程序 class 获取 excel 文档,该实用程序需要 Java.Util.List.
我正在使用 Mongodb 获取数据,但是 Mongodb return 是一个 Flux myList。
我如何"give" Excel实用程序 class 列表 myList 生成我可以 return 在 ResponseEntity 中的工作簿 class?
到目前为止我有这个代码:
final Workbook myWorkBook = ExcelUtils
.pojo2xlsx(this.myMongoRepository.findAll()
.toStream().collect(Collectors.toList()),
MyType.class);
方法 myMongoRepository.findAll return 是一个 Flux < MyType >。这是一个标准的 ReactiveMongoRepository 接口。
我想问题归结为我需要 "block" 流来获取列表,以便我的自定义 Excel 服务可以获取常规列表。我可以在测试代码中做到这一点,但是当在 Web Reactive Framework 中 运行 时,它似乎不允许阻塞。
假设您是从您想要的反应式上下文中调用它
Mono<Workbook> wb = s.collectList().map(l -> ExcelUtils.pojo2xlsx(l));
在这种情况下,您不想自己开始工作或在反应式调度程序管理的线程内造成阻塞。您只需 return 将这个新的 Mono 添加到框架中,让它决定何时以及如何安排工作。
但是,如果您从需要 return 工作簿的普通方法调用它,那么您别无选择,只能阻止,但此同步方法的预期是您将开始工作并且阻塞直到它完成。