Расписание работы с пользовательским триггером и параметрами - PullRequest
4 голосов
/ 12 января 2012

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

В документах приводятся примеры того, как планировать / запускать задания:

== Динамическое планирование заданий ==

Начиная с версии 0.4.1, вы можете динамически планировать выполнение заданий.

Доступны следующие методы:

  • MyJob.schedule(String cronExpression, Map params?) создает триггер хрон;
  • MyJob.schedule(Long repeatInterval, Integer repeatCount?, Map params?) создает простой триггер: повторяет задание repeatCount + 1 раз с задержкой в ​​repeatInterval миллисекундах;
  • MyJob.schedule(Date scheduleDate, Map params?) планирует выполнение одного задания на конкретную дату;
  • MyJob.schedule(Trigger trigger) планирует выполнение задания с помощью пользовательского триггера;
  • MyJob.triggerNow(Map params?) принудительное немедленное выполнение задания.

    Каждый метод (кроме одного для пользовательского триггера) принимает необязательный аргумент 'params'. Вы можете использовать его для передачи некоторых данных на вашу работу, а затем получить доступ к ним с работы.

Grails Версия 1.3.7 Кварцевый плагин версия 0.4.2

Итак, почему MyJob.schedule(Trigger trigger) не принимает параметры? И как мне добиться того, чего я хочу, используя пользовательский триггер и карту или параметры для задания?

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Если вы посмотрите , где эти методы определены в исходном коде плагина Quartz , вы увидите, что все функции, которые принимают Map params, являются обертками, которые создают Triggerи затем запустить его в планировщике.

Метод MyJob.schedule(Trigger trigger), просто запускает триггер, который вы передаете, так что вы можете добавить свои параметры в свойство Triggers jobDataMap, прежде чем вызыватьэтот метод, а именно:

trigger.jobDataMap.putAll [foo:"It Works!"]
MyJob.schedule( trigger )
1 голос
/ 08 июля 2015

Тим ответ правильный, вот небольшое обновление.

Trigger trigger = TriggerBuilder
                .newTrigger()
                .startNow()
                .withIdentity("triggerName", "groupName")
                .withSchedule(
                SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5000).repeatForever()
                ).build();
        trigger.jobDataMap.putAll([foo:"bar"])
        MyJob.schedule(trigger)
...