2012-01-12 77 views
4

我正在使用Grails Quartz插件並希望使用程序創建的觸發器來安排我的作業。我不知道執行間隔會是什麼。我希望工作無限期地執行。使用自定義觸發器和參數安排作業

如何安排The docs give some examples /觸發工作:

==動態作業順序==

從0.4.1版本開始,你必須動態地調度作業執行的能力。

這些方法是可用的:

  • MyJob.schedule(String cronExpression, Map params?)創建的cron觸發器;
  • 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)用不了PARAMS?而且,如何使用自定義觸發器和地圖或參數來實現我想要的功能?

回答

3

如果您在Quartz plugin sourcecodewhere these methods are defined,你可以看到這一切採取Map params的功能,營造出Trigger包裝再火其關閉,以調度。

MyJob.schedule(Trigger trigger)方法,只是觸發關你通過它的觸發,所以它是由你來你的PARAMS加入到觸發器jobDataMap屬性調用此方法之前,即:

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

謝謝,Tim。鏈接到源代碼也很方便。 – David 2012-01-14 02:32:47

+0

我得到一個沒有財產的例外......我必須導入一些東西嗎? – 2013-09-22 12:21:07

1

添的回答是正確的,這裏有點更新。

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