Spring Boot обеспечивает корректное завершение работы, но только для Tomcat. Поскольку мои задачи также плавно завершаются, я настроил свой ThreadPoolTaskExecutor на:
Код: Выделить всё
// Initialize ThreadPoolTaskExecutor
threadPoolTaskExecutor.setAwaitTerminationSeconds(60);
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
При обновлении до Java 21 поддерживается виртуальный поток, поэтому пул потоков больше не нужен, вместо этого я использовал SimpleAsyncTaskExecutor. К сожалению, SimpleAsyncTaskExecutor не поддерживает плавное завершение работы, я перешел на этот SimpleAsyncTaskScheduler с помощью:
Код: Выделить всё
// Initialize SimpleAsyncTaskScheduler
simpleAsyncTaskScheduler.setTaskTerminationTimeout(600000);
Проблема в следующем:
Код: Выделить всё
This scheduler variant does not track the actual completion of tasks but rather just the hand-off to an execution thread
Поэтому, когда я закрываю свое приложение, все еще выполняются задачи, которые
НЕ ожидают завершения, что не совсем изящно.
Как я могу решить эту проблему?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... ual-thread