首頁  >  文章  >  Java  >  如何在非同步任務執行中保留請求範圍?

如何在非同步任務執行中保留請求範圍?

DDD
DDD原創
2024-10-31 21:59:02769瀏覽

How to Preserve Request Scope in Asynchronous Task Execution?

在非同步任務執行中保留請求範圍

在使用非同步Web 服務的應用程式中,伺服器在透過AsyncTaskExecutor 開始非同步處理時回應確認,它變成對於啟用請求範圍至關重要。這對於存取使用 @Scope(WebApplicationContext.SCOPE_REQUEST) 註解的 bean 類別至關重要。

通常,在這種情況下,由於請求作用域在 DispatcherServlet 外部運行的 SimpleAsyncTaskExecutor 內未處於活動狀態,因此會發生異常。要解決此問題,請考慮以下解決方案:

  1. 建立自訂任務執行器:定義一個自訂執行器,擴展Spring 的ThreadPoolTask​​Executor 並攔截已提交任務的執行。
  2. 封裝請求上下文:建立一個專門的Callable(或Runnable),它使用請求上下文資訊來設定和清除後台執行緒上的上下文。
  3. 覆蓋執行配置: 覆寫預設執行器配置以使用自訂執行器。

注意:此方法僅支援 Session 和 Request 範圍的 beans,而不支援安全上下文(例如 Spring Security) 。對於安全上下文處理,應實施單獨的措施。

範例實作:

執行器:

可呼叫

可呼叫

可呼叫配置:

以上是如何在非同步任務執行中保留請求範圍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn