2012-01-12 4 views
4

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

The docs give some examples о том, как планировать/запуск задание:

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

Начиная с 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 Кварц Plugin версия 0.4.2

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

ответ

3

Если посмотреть where these methods are defined в Quartz plugin sourcecode, вы можете увидеть, что все функции, которые принимают Map params являются оболочками, которые создают Trigger, а затем стрелять его в планировщик.

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

trigger.jobDataMap.putAll [foo:"It Works!"] 
MyJob.schedule(trigger) 
+0

Спасибо, Тим. Ссылка на исходный код также удобна. – David

+0

Я получаю исключение для свойства ... мне нужно что-то импортировать? –

1

тим ответ Правильно, здесь немного обновляется.

Trigger trigger = TriggerBuilder 
       .newTrigger() 
       .startNow() 
       .withIdentity("triggerName", "groupName") 
       .withSchedule(
       SimpleScheduleBuilder.simpleSchedule() 
       .withIntervalInSeconds(5000).repeatForever() 
       ).build(); 
     trigger.jobDataMap.putAll([foo:"bar"]) 
     MyJob.schedule(trigger) 
Смежные вопросы