Следуйте идеи упомянутых here, то вы должны быть в состоянии иметь:
public class GuaranteeSchedule implements Trigger {
private Future<?> resultForNextRun;
private TaskScheduler scheduler;
public void scheduledTask() {
// 'this' is this trigger that is used by the scheduler
// and the method `nextExecutionTime` is automatically called by the scheduler
resultForNextRun = scheduler.schedule(theTask, this);
// theTask is the object that calls something()
}
// Implementing Trigger to add control dynamic execution time of this trigger
@Override
public Date nextExecutionTime(TriggerContext tc) {
// make sure the result for the previous call is ready using the waiting feature of Future
Object result = resultForNextRun.get();
// Use tc or other stuff to calculate new schedule
return new Date();
}
}
Остальное, вы должны следовать конфигурации, указанную в ссылке. Я считаю, что это решит проблему зависимости следующего вызова триггера от результата предыдущего. Вы также можете быть осторожны при первом звонке scheduledTask
, чтобы убедиться, что resultForNextRun != null
.
Это хороший вариант использования шаблона проектирования стратегии. Пожалуйста, проверьте документацию http://en.wikipedia.org/wiki/Strategy_pattern#Example – Phani
Какой подход из Spring вы используете для планирования задач? В качестве примера может помочь [это] (http://darthanthony.wordpress.com/2009/07/07/dynamic-scheduling-with-javaspring/). – nobeh
Спасибо, @nobeh. К сожалению, ваша ссылка не очень помогает мне, я уже пробовал аналогичный подход, но, по-видимому, у меня нет возможности перенести задачу в зависимости от ее результата. Я пробовал играть с поддержкой Spring Quartz и Spring Namespace Spring 3.0 без везения. Любая помощь приветствуется. Спасибо – satoshi