2015-07-13 6 views
1

Я видел образец динамического триггера в github и использует фиксированную скорость/задержку, но возможно ли реализовать динамический триггер с выражением cron, когда после завершения задания с пользовательским кодом выхода мы хотим, чтобы cron выражаясь таким образом, чтобы он больше не проводил опрос за этот день или не менял cron expressin, чтобы начать опрос с разного времени вперед.Динамический триггер интеграции интеграции с cron-выражением

ответ

0

К сожалению, org.springframework.scheduling.support.CronTrigger использует поле final, поэтому мы не можем изменить его состояние во время выполнения. Поэтому любые идеи искать способ изменения стоимости - это пустая трата времени.

От других давайте рассмотрим это как просто решение time producer, чтобы уведомить планировщика о начале заданной задачи.

Других слов здесь является Trigger контракта исходного кода:

public interface Trigger { 

    Date nextExecutionTime(TriggerContext triggerContext); 

} 

Итак, что наше решение должно поставить только лишь вернув конкретный Date для каждого nextExecutionTime вызова.

Только то, что вам нужно сделать, это то, что dynamic trigger исполнение, которое соответствует вашим требованиям.

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

Хотя вы можете stop() вы адаптер после выполнения задачи, придать новый CronTrigger к это и start() это снова.

+0

Но если вы остановите адаптатор с помощью управляющей шины, как он начнется на следующий день, не вызывая каких-либо других приложений. Все, что нам нужно, пусть на первый день, если работа закончена успешно, затем измените время следующего расписания с помощью динамического триггера таким образом, чтобы он перешел на следующий день. Поэтому я считаю, что расширение DynamicTrigger является правильным путем и просто переопределяет метод nextscheduledTime. – user509755

0

Вы можете написать настраиваемый триггер, который просто обертывает CronTrigger, и вы можете заменить делегата CronTrigger по желанию.

Однако ограничение механизма Trigger заключается в том, что вы не можете изменить существующее расписание.

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

Весна Интеграция 4.2 (в настоящее время на рубеже веков 2) имеет conditional pollers, что позволит сделать вещи как это немного проще.