Пружинная загрузка Async - PullRequest
       1

Пружинная загрузка Async

1 голос
/ 04 апреля 2020

Я не уверен, как работает Spring boot Asyn c? Я знаю, что веб-сервер имеет свой собственный пул потоков, и каждый запрос обрабатывается потоком из пула. Теперь, когда мы реализуем асинхронный веб-сервис с весенней загрузкой и сконфигурируем, скажем, 10 потоков, означает ли это, что внутри потока есть поток? Чтобы уточнить, веб-сервер назначит запрос потоку. Теперь, когда этот поток начинает выполнение и вызывает службу / функцию, помеченную @Asynch, он может создать несколько потоков для обработки запроса. Пожалуйста, дайте мне знать, если мое понимание верно.

Ответы [ 3 ]

2 голосов
/ 04 апреля 2020

Это не нить внутри другого. @ Asyn c сделает запрос выполненным в отдельном потоке, и вызывающий запрос не будет ожидать завершения вызванного метода

Чтобы включить Asyn c, вы можете сделать это, добавив,

@Configuration
@EnableAsync
public class AsyncExample {
   // Define a threadpool executor if needed,
   @Bean(name = "threadPoolTaskExecutor")
   public Executor threadPoolTaskExecutor() {
      return new ThreadPoolTaskExecutor();
   }
}

Затем вы можете определить метод asyn c, как показано ниже, с указанным исполнителем пула потоков,

@Async("threadPoolTaskExecutor")
public void asyncMethodWithConfiguredExecutor() {
   // Method Definition
}
0 голосов
/ 04 апреля 2020

Можно настроить следующую конфигурацию, чтобы контролировать больше потоков параметров , таких как имя потока с префиксом, размер пула, ... таким образом вы гарантируете, что вы управляете пулом потоков.

   @Configuration
    @EnableAsync
    public class AsyncConfiguration implements AsyncConfigurer {

        @Override
        public Executor getAsyncExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(5);
            executor.setMaxPoolSize(10);
            executor.setQueueCapacity(5000);
            executor.setThreadNamePrefix("MyThread-");
            executor.setWaitForTasksToCompleteOnShutdown(true);
            executor.initialize();
            return executor;
        }

        @Override
        public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
            return new SimpleAsyncUncaughtExceptionHandler();
        }
    }

И вы помещаете аннотацию @ Asyn c в bean-компонент кода или в метод, который вы хотите сделать асинхронным.

Для получения дополнительной информации по этому вопросу вы можете обратиться к документации по планированию весны здесь .

Надеюсь, вы найдете это полезным;)

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

Использование @ Asyn c заставит его выполняться в отдельном потоке, т.е. вызывающая сторона не будет ждать завершения вызванного метода. И вы можете настроить используемый Executor

@Configuration
@EnableAsync
public class SpringAsyncConfig {

    @Bean(name = "fooExecutor")
    public Executor fooExecutor() {
        return new ThreadPoolTaskExecutor();
    }
}

И используя @ Asyn c ("fooExecutor")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...