Как создать One ThreadPoolExecutor для пользователя? - PullRequest
3 голосов
/ 15 апреля 2020

У меня есть требование, где мы должны создать ThreadPoolExecutor для каждого арендатора. Параллельно я использую Spring с учетом @Async Аннотация, но это для всего приложения. Таким образом, если сервер занят одним клиентом, это повлияет на клиента другого пользователя. @Async настроен на ThreadPoolExecutor. Но это характерно для всех пользователей арендатора.

РЕДАКТИРОВАТЬ: мне нужен пул потоков для каждого арендатора. Проще говоря, мне нужно поделиться ThreadPool для группы пользователей. Все пользователи из этой группы могут использовать один и тот же поток Thread.

Как это возможно с существующими java API. Пожалуйста, помогите.

Как отделить ThreadPool для арендаторов? Например: арендатору 1 назначено около 20 потоков, поэтому все пользователи (U1, U2 ....) могут использовать этот threadPool, и это не повлияет на другого арендатора. То же самое с Tenant 2, ему будет назначено около 20 потоков ....

1 Ответ

0 голосов
/ 15 апреля 2020

Не для обсуждения, является ли это "хорошим требованием" или нет - просто-peasy:

  1. (Расширить ThreadPoolTaskExecutor в пользовательском классе и ...) добавить @SessionScope d @Bean этого к вашему контексту приложения.
  2. Используйте это. (В контроллерах через аннотацию @ Asyn c)

Например:

import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;

@Component
@SessionScope
public class MyThreadPoolExecutor extends ThreadPoolTaskExecutor {

   // only for test-/debuging
   static volatile int cnt = 0;

   public MyThreadPoolExecutor() {
      // only for test-/debuging
      System.out.format("MyThreadPoolExecutor#%d%n", cnt++);
   }
}

Использование в простом контроллере, подобном следующему:

@Async // !
@GetMapping("/hello")
@ResponseBody
public Future<String> hello() {
    return new AsyncResult("Hello");
}

. .Я получаю логи MyThreadPoolExecutor, когда (и только когда) используя новый браузер / сессию / пользователя в режиме инкогнито.

...