2016-01-29 2 views
0

У меня есть код, запускаемый каждые две минуты с помощью аннотации @Scheduled. Однако наши рабочие места имеют тенденцию работать в течение более длительных периодов времени. Как я понимаю, аннотация @Scheduled ставит в очередь новые задания и запускает их сразу же после завершения первого задания. Я не хочу, чтобы это произошло. Я хочу, чтобы в нем было всего 1 экземпляр выполняемой работы и не было экземпляров в очереди. Как я могу это сделать?Как остановить Spring @Scheduled из очередей заданий

@Scheduled(cron = "0 */2 * * * ?") 
public void twoMinMethod() { 
    // code here 
} 
+0

Ну, это зависит. Если у вас есть TaskExecutor с несколькими потоками, и есть свободные потоки, у вас есть несколько одновременных исполнений. Пока не закончится пул, на основе выбранной стратегии задания будут поставлены в очередь, отброшены или вы получите исключение. Так что на самом деле это зависит. Если вам нужен один экземпляр, вам нужно использовать планировщик, такой как кварц, который обеспечивает поддержку этого. –

ответ

1

Если вам не нужно запускать рабочие места именно на минуту, вы можете переключиться на другой, не кронтаб синтаксис, который позволит такого рода вещи. Пример ниже выполнит этот метод, подождите две минуты с момента его завершения и повторите его.

@Scheduled(fixedDelay=120000) 
public void twoMinMethod() { ... } 

Подробнее на Spring Documentation.