2016-11-30 8 views

答えて

0

私はあなたの質問を見ました。私はまったく同じ問題に直面しているので、おそらくそれは最高ではありませんが、現時点では私の仕事には十分です、次のソリューションを思いついた。

私はここで考えているHow to enable request scope in async task executorと私はそれが私のニーズのために正しく動作していなかったので、少し修正しました。私が何をしたか

た:

  1. 上記のリンクのようなTenantAwareThreadPoolExecutorを作成します。
  2. TenantAwareCallableを作成します(これはRequestAttributesの代わりにプライベートString tenantNameを持ちます)。
  3. 要求から取得した現在のテナントを格納するシングルトンコンポーネントを作成します。
  4. このコンポーネントには、呼び出し可能なcallable()メソッドで使用する必要があるテナントを保存してクリアします。
  5. このシングルトンからテナントを取得するには、CurrentTenantIdentifierResolverを変更する必要があります(要求をチェックした後、他のリクエストでは同じテナントが使用されます)。

注意:これはキュースタイルでタスクを1つずつ実行する場合にのみ機能します。同時にいくつかを実行すると、この方法はうまくいきません。

改善のためのアイデアはすべて受け付けます。

関連する問題