2012-01-12 14 views
4

Grails Quartzプラグインを使用しており、プログラムで作成されたトリガを使用してジョブをスケジュールする必要があります。私は実行間隔がどうなるか事前に知らない。私は仕事を無期限に実行したい。カスタムトリガとパラメータでジョブをスケジュール

/トリガジョブをスケジュールする方法のThe docs give some examples

==ダイナミックジョブスケジューリング==

あなたが動的にジョブ実行をスケジュールする能力を持っている0.4.1バージョンから開始します。

これらの方法が利用可能である:

  • MyJob.schedule(String cronExpression, Map params?)がクーロントリガーを作成します。
  • MyJob.schedule(Long repeatInterval, Integer repeatCount?, Map params?)単純なトリガーを作成します。repeat repeat Count + repeatInterval millisecondsの遅延で1回。
  • MyJob.schedule(Date scheduleDate, Map params?)特定の日付に対して1つのジョブ実行をスケジュールします。
  • 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)方法は、ちょうどあなたがそれを渡すトリガーをオフに発射するので、あなたは、このメソッドを呼び出す前に、トリガにjobDataMapプロパティをあなたのparamsを追加するのはあなた次第それは、すなわち:

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) 
関連する問題