Используя cron4j, у меня есть отдельные задачи, которые требуют отдельного расписания.
Итак, у меня есть два графика, как показано ниже. Вы можете видеть, что у меня есть служба executor, а также новый экземпляр планировщика.
Поскольку у меня есть один экземпляр планировщика, и у меня есть две задачи, которые я хочу запускать в разное время. Означает ли это, что в приведенной ниже конфигурации я просто переназначаю существующий экземпляр планировщика?
Нужно ли иметь несколько экземпляров планировщика?
Создание службы исполнителя и планировщика
//Creates Executor Instance
final ExecutorService es = Executors.newSingleThreadExecutor();
// Creates a Scheduler instance.
Scheduler scheduler = new Scheduler();
Создать расписание для первой повторяющейся задачи
// Schedule a once-a-week task at midday on Sunday.
scheduler.schedule("* 12 * * 7", new Runnable() {
public void run() {
Log.i(CLASS_NAME, "ConstituentScraper Schedule");
es.submit(new ConstituentScraper());
}
});
Создать расписание для второго повторяющегося задания
// Schedule a once-a-day task.
scheduler.schedule("* 7 * * 1-5 | * 18 * * 1-5 ", new Runnable() {
public void run() {
Log.i(CLASS_NAME, "SummaryScraper Schedule");
es.submit(new SummaryScraper());
}
});
1 ответ
Ответ на вышесказанное - да. Вам нужно иметь отдельные экземпляры планировщика для каждого расписания.
Таким образом, в результате код должен выглядеть следующим образом.
В случае, если у вас есть два расписания, экземпляр будет настроен индивидуально для каждого из них.
// Creates a Constituent Scheduler instance.
Scheduler constituentScheduler = new Scheduler();
// Creates a Summary Scheduler instance.
Scheduler summaryScheduler = new Scheduler();
И каждый график может быть настроен индивидуально
// Schedule a once-a-week task at 8am on Sunday.
constituentScheduler.schedule("0 8 * * 7", new Runnable() {
public void run() {
Log.i(CLASS_NAME, "ConstituentScraper Schedule");
es.submit(new ConstituentScraper());
}
});
//scheduler.schedule("28 7 * * 1-5 | * 18 * * 1-5 ", new Runnable() {
summaryScheduler.schedule("0 7 * * 1-5 |0 18 * * 1-5 ", new Runnable() {
public void run() {
Log.i(CLASS_NAME, "SummaryScraper Schedule");
// TODO only put in queue if a working day
es.submit(new SummaryScraper());
}
});
Каждое расписание также должно быть запущено после его настройки.
// Starts the Scheduler
constituentScheduler.start();
// Starts the Scheduler
summaryScheduler.start();