Используя 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();
Другие вопросы по тегам