Я настроил плавное завершение работы, чтобы прекратить получение новых HTTP-запросов и дать 60 секунд для завершения текущих запросов.
Когда HTTP-запрос поступает и обрабатывается метод @Async, если сигнал завершения работы получен после принятия запроса, но до его передачи асинхронному методу, я сталкиваюсь со следующей ошибкой:
Код: Выделить всё
ExecutorService in shutdown state did not accept task:
org.springframework.aop.interceptor.AsyncExecutionInterceptor
Код: Выделить всё
private Executor getExecutor(ThreadPoolProperties threadPoolProperties) {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(threadPoolProperties.getCorePoolSize());
executor.setMaxPoolSize(threadPoolProperties.getMaxPoolSize());
executor.setQueueCapacity(threadPoolProperties.getQueueCapacity());
executor.setKeepAliveSeconds(threadPoolProperties.getQueueCapacity());
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(60);
executor.initialize();
return executor;
}
Код: Выделить всё
spring:
task:
execution:
shutdown:
await-termination: true
await-termination-period: 60s
lifecycle:
timeout-per-shutdown-phase: 60s
server:
shutdown: graceful
Это указывает на то, что ExecutorService находится в состоянии завершения работы и не принимает новые задачи. Как я могу обработать этот сценарий, чтобы гарантировать, что асинхронная задача по-прежнему будет принята и выполнена, даже если сигнал завершения работы получен непосредственно перед передачей задачи асинхронному методу?
Я ищу предложения или рекомендации по решению этой проблемы.
Подробнее здесь: https://stackoverflow.com/questions/790 ... in-shutdow