2014-02-19 3 views
0

В моем приложении у меня есть одно задание cron, которое подключается к FTP-серверу и передает файлы, очень простую функциональность и настраивается с использованием выражения spring @Schedule с выражением cron в качестве параметра. Он работал отлично в течение нескольких месяцев, а затем внезапно остановился, получил connectionException. Возможно, сервер FTP был отключен или что-то случилось, что заставляет поток cron останавливаться. Я искал (google) по причинам, но не получил (ничто в журналах также - просто имя исключения). Это может быть одно время :)Как проверить, запущено ли задание cron для расписания (Spring 3.1).

Мой вопрос в том, что я могу поставить чек или наблюдатель на задании cron @Schedule, чтобы узнать, работает ли он или нет?

Извините за мое плохое объяснение/английского

Благодаря

+0

Вы всегда можете отправить письмо на заданный адрес при неудаче задания - с помощью stacktrace в нем – fge

+0

Спасибо за быстрый ответ, у вас есть пример или вы можете указать мне правильный документ о настройке электронной почты в @Schedule – user1544460

ответ

1

мой вопрос в том, что я могу поставить некоторый чек или Бодрствующий на хрон @Schedule знать, является ли она работает или нет?

В принципе, вы не можете.

При использовании @Scheduled Spring использует ScheduledAnnotationBeanPostProcessor для регистрации заданных задач (аннотированные методы). Он регистрирует их с помощью ScheduledTaskRegistrar. ScheduledAnnotationBeanPostProcessor - ApplicationListener<ContextRefreshEvent>. Когда он получает ContextRefreshEvent от ApplicationContext, он планирует задачи, зарегистрированные в ScheduledTaskRegistrar.

Во время этого шага эти задачи запланированы с помощью TaskScheduler, который обычно обертывает ScheduledExecutorService. If an exception is uncaught in a submitted task, then the task is removed from the ScheduledExecutorService queue.

TaskScheduler класс не предоставляет публичный API для получения запланированных заданий, то есть. Объекты ScheduledFuture. Поэтому вы не можете использовать его, чтобы узнать, работают ли ваши задачи или нет.

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

+0

Спасибо за ответ. Я буду поддерживать контекст cron в DB - это время последнего выполнения, следующее время выполнения. И еще одна служба проверит это время с текущим временем и, надеюсь, я буду знать, что Thread работает или нет. – user1544460

+0

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

Смежные вопросы