2016-11-30 95 views

回答

0

我剛剛看到你的問題。我面臨着完全相同的問題,我提出了以下解決方案,這可能不是最好的,但目前對於我的任務來說已經足夠了。

我在這裏採納了這個想法How to enable request scope in async task executor,我稍微修改了它,因爲它不能正確地滿足我的需求。

我所做的是:

  1. 創建類似上面的鏈接TenantAwareThreadPoolExecutor;
  2. 創建TenantAwareCallable(它將有一個私有字符串tenantName而不是RequestAttributes(以您已經這樣做的方式))。
  3. 創建一個單獨的組件,它將存儲您從請求中獲取的當前租戶。
  4. 將可調用的call()方法中需要使用的租戶保存並清除到此組件中。
  5. 現在您必須更改您的CurrentTenantIdentifierResolver以從該單身人士獲得租戶(在檢查了請求之後,否則其他請求將使用與該租戶相同的租戶)。

請注意:只有在以隊列形式一個接一個地執行任務時,這纔會起作用。如果你同時執行一些,這種方法將不起作用。

任何有關改進的想法都將被接受。