Завершение работы Spring Boot с помощью планировщика

Я использую Spring Boot + Spring Task Scheduler для создания приложения для опроса. Я планирую использовать привод для выключения приложения во время периодов обслуживания (см. Конечную точку выключения для привода: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-endpoints).

У меня вопрос: будет ли Spring достаточно умен, чтобы завершить задачу в полете, прежде чем корректно закрыть приложение? Будет ли Spring достаточно умен, чтобы не запускать другую задачу, если задача в полете завершится до завершения работы?

Спасибо.


person Eric    schedule 27.01.2017    source источник
comment
Я знаю, что завершение работы по умолчанию дожидается 60 (миллисекунд?), Прежде чем завершить работу приложения.   -  person Eric    schedule 28.01.2017


Ответы (2)


Вы можете контролировать это, установив

ThreadPoolTaskExecutor#waitForTasksToCompleteOnShutdown

к истине.

В javadoc унаследованного сеттера есть действительно хорошее объяснение

org.springframework.scheduling.concurrent.ExecutorConfigurationSupport#setWaitForTasksToCompleteOnShutdown

Set whether to wait for scheduled tasks to complete on shutdown, not interrupting running tasks and executing all tasks in the queue.

Default is "false", shutting down immediately through interrupting ongoing tasks and clearing the queue. Switch this flag to "true" if you prefer fully completed tasks at the expense of a longer shutdown phase...

Планировщик Spring по умолчанию использует

java.util.concurrent.ThreadPoolExecutor

который не будет запускать новые задачи во время выключения, как описано в javadoc of

java.util.concurrent.ThreadPoolExecutor#shutdown

Инициирует упорядоченное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи не принимаются ...

person Stefan Isele - prefabware.com    schedule 28.01.2017

Начиная с Spring boot 2.1 вы можете установить следующее свойство

# Whether to wait for running jobs to complete on shutdown.
spring.quartz.wait-for-jobs-to-complete-on-shutdown=false
person RenRen    schedule 09.04.2019
comment
Это значение по умолчанию, поэтому устанавливать нечего. - person rajadilipkolli; 03.01.2020
comment
Это только для реализации Quartz. Приложение может полагаться на другую реализацию планировщика. - person mxf; 24.03.2020