Spring 4 @Scheduled перестает работать

Я использую аннотацию @Scheduled для запуска задания cron. Расписание работает какое-то время, а потом перестает работать. Приведу упрощенные фрагменты своего кода:

Это планировщик:

//org.springframework.scheduling.annotation.Scheduled
@Scheduled("*/30 * * * * *")    
public void performTask() {
    logger.info("Starting agent");
    getAgentAsyncTask().execute();
    logger.info("Ending agent");
}

Это задача, которую выполняет планировщик

//org.springframework.scheduling.annotation.Async
@Async(TASK_EXECUTOR)
@Override
public void execute() {
    logger.info("Starting task");
    //send some rest requests
    logger.info("Ending task");
}

Оба: «Начальный агент» и «Конечный агент» регистрируются одинаковое количество раз. Таким образом, каждое планирование заканчивается должным образом.

Оба: «Начало задачи» и «Завершение задачи» регистрируются одинаковое количество раз. Так что, безусловно, «задача» не блокирует вещи.

Но он просто перестает регистрироваться через некоторое время. В чем может быть проблема?

Здесь TASK_EXECUTOR — это следующий bean-компонент:

 @Bean(TASK_EXECUTOR)
 public ThreadPoolTaskExecutor createDefaultTaskExecutor() {
          ThreadPoolTaskExecutor te = new ThreadPoolTaskExecutor();
          te.setMaxPoolSize(15);
          te.setCorePoolSize(15);
          te.initialize();
          return te;
    }

Весенняя версия:

4.1.6.ВЫПУСК


person coolscitist    schedule 30.08.2015    source источник
comment
Вы запускаете это внутри или снаружи контейнера? Кроме того, какая версия Java?   -  person Brad    schedule 30.08.2015
comment
Внутри контейнера (конфигурация на основе аннотаций, у меня есть @EnableScheduling @EnableAsync). Java версии 8   -  person coolscitist    schedule 30.08.2015
comment
ты читал? stackoverflow.com/q/17909404/206466   -  person xenoterracide    schedule 18.09.2015
comment
Как указано в верхнем ответе ссылки @xenoterracide, что дает вам kill -3 (или использование JVisualVM)? =› чтобы увидеть, не застряли ли где-нибудь темы   -  person Benoît    schedule 20.09.2015
comment
Привет. На самом деле задача, которую должен был запустить исполнитель задачи, имела бесконечный цикл, поэтому она перестала планироваться. Спасибо за все ваши ответы.   -  person coolscitist    schedule 23.09.2015


Ответы (2)


Такая ситуация может быть вызвана бесконечным циклом в теле запланированного метода или вызовом внешней системы, а элемент управления синхронно ожидает получения ответа без тайм-аута.

Попробуйте сами с помощью этого простого фрагмента кода. Метод будет запущен только один раз и не будет запущен после указанного интервала в 5 секунд.

@Scheduled(fixedRate = 5000)
public void printPeriodically() {
    System.out.println("This is my periodic method");
    while(true) {};
}
person Jagger    schedule 25.09.2015
comment
К сожалению, это fixedRate прекращается через несколько дней. У меня аналогичное использование с @coolscitist - запускать и останавливать журналы и вызывать функцию @Async. Странный... - person Krzysztof Szewczyk; 23.10.2018
comment
Нет ли способа установить тайм-аут для запланированного исполнителя задачи? - person dukethrash; 09.12.2020
comment
@dukethrash Я думаю, всегда есть возможность проверить тайм-аут внутри тела метода, не так ли? - person Jagger; 11.12.2020

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

person pappu_kutty    schedule 25.09.2015