![](/img/trans.png)
[英]spring-webflux : How to Extract user defined object from Mono<T> or Flux<T> from the response without blocking?
[英]How to get User object from Mono<User> without blocking it in Java?
我有一個存儲庫調用,它將給我 Mono。
前任:
private User getUserData (User user)
{
Mono<User> monoUser=userRepository.insert(user);
User user= monoUser.block;
return user;
}
如何在不阻塞 spring 反應的情況下實現這一點。 我不想做 monoUser.block 來獲取用戶 object。
獲取 userObject 后,我需要通過 Mapstruct 將 id 轉換為 UserId。我還想在不阻塞的情況下實現這一點,以便我將使用響應式功能。
你可以用Mono
做很多事情,而不是調用block
,這些事情不會阻止。 您可以做的一件事是將一個Consumer
附加到它,當Mono
的操作成功完成時,它會被調用。 這樣做的方法的簽名(在Mono
)是:
Mono<T> doOnSuccess(Consumer<? super T> onSuccess)
然后你可以繼續工作,當動作完成時你的消費者會被調用。 然后,該調用將啟動您希望在添加用戶后執行的任何操作。
您將寫入數據庫的代碼放在Consumer
中。 如果該對象需要信息,例如要寫入的數據庫句柄,您可以在構造對象時將這些信息傳遞給doOnSuccess
調用,然后再將其傳遞給doOnSuccess
調用。 ——
處理此問題的正確方法是將 Mono<> output 與 function 簽名鏈接,並通過在 Mono 管道中調用 getUserData 方法來使用它。 要使用它,您必須維護一個完整的反應式管道,其中所有操作通過 map / flatmap 等各種操作相互鏈接。 或者,如果您只想打印插入日志中的用戶,您可以使用.doOnNext() 來打印相同的內容,這將在不同的線程中運行,不會阻塞您的主 Mono 線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.