簡體   English   中英

如何從 Mono 獲取用戶 object<user> 沒有在 Java 中阻止它?</user>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM