如何解决使用 Flux 更新行的最有效方法是什么 - Spring WebFlux
我正在学习 Spring WebFlux 并且我正在尝试更新记录列表,我想知道我是否尽可能有效地进行操作。
我想知道如何改进“persisStatusOrderLineNumber”方法,因为我正在学习这项技术,我应该使用 subscribeOn 吗?使用 subOrdersFlux 异步更新数据库中的行的最有效方法是什么?
private Mono<Void> persistStatusOrderLineNumber(Long orderNumber,SubOrdersItem subOrder) {
Flux<OrderLinesItem> subOrdersFlux = Flux.fromIterable(subOrder.getOrderLines());
return subOrdersFlux
.flatMap(x -> orderLineRepository
.updateShipmentCustomerOrderOrderLine(orderNumber,x,subOrder).then())
.then();
}
这是更新数据库的方法:
public Mono<Void> updateShipmentCustomerOrderOrderLine(
Long id,OrderLinesItem orderLinesItem,SubOrdersItem subOrdersItem) {
Optional<OrderLinesItem> optionalOrderLinesItem = Optional.ofNullable(orderLinesItem);
if(orderLinesItem.getOrderLineStatus() == null) return Mono.empty();
int statusId = getStatusId(orderLinesItem.getOrderLineStatus());
DatabaseClient.GenericExecuteSpec bindings =
client
.execute(
"UPDATE public.order_line "
+ "SET status_id = :status_id,"
+ "updated_at = :updated_at,"
+ "physical_location = :physical_location "
+ "WHERE order_line_number = :order_line_number AND order_number = :order_number AND sub_order_number = :sub_order_number")
.bind("status_id",statusId)
.bind("updated_at",LocalDateTime.now())
.bind(
"physical_location",optionalOrderLinesItem.map(OrderLinesItem::getPhysicalLocation).orElse(""))
.bind("order_line_number",orderLinesItem.getOrderLineNumber())
.bind("order_number",id)
.bind("sub_order_number",subOrdersItem.getSuborderNumber());
FetchSpec<Map<String,Object>> sqlResult = bindings.fetch();
return sqlResult
.rowsUpdated()
.doOnNext(ex -> retryUpdate(id,ex)).log()
.onErrorResume(
ex ->
Mono.error(new CustomException(HttpStatus.INTERNAL_SERVER_ERROR,ex.getMessage())))
.then();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。