2016-11-30 133 views

回答

0

我刚刚看到你的问题。我面临着完全相同的问题,我提出了以下解决方案,这可能不是最好的,但目前对于我的任务来说已经足够了。

我在这里采纳了这个想法How to enable request scope in async task executor,我稍微修改了它,因为它不能正确地满足我的需求。

我所做的是:

  1. 创建类似上面的链接TenantAwareThreadPoolExecutor;
  2. 创建TenantAwareCallable(它将有一个私有字符串tenantName而不是RequestAttributes(以您已经这样做的方式))。
  3. 创建一个单独的组件,它将存储您从请求中获取的当前租户。
  4. 将可调用的call()方法中需要使用的租户保存并清除到此组件中。
  5. 现在您必须更改您的CurrentTenantIdentifierResolver以从该单身人士获得租户(在检查了请求之后,否则其他请求将使用与该租户相同的租户)。

请注意:只有在以队列形式一个接一个地执行任务时,这才会起作用。如果你同时执行一些,这种方法将不起作用。

任何有关改进的想法都将被接受。