2

Quartz2プラグインを使用していて、非常に単純なジョブを動的にトリガーしようとしています。ユーザーが特定のアクションを実行すると、ジョブは将来特定の分数だけトリガーされ、1回だけ実行される必要があります。

日付とジョブデータを取得する単純な「schedule」メソッドを使用してみました。

def sendTime = new Date()
use(groovy.time.TimeCategory) {
    sendTime = sendTime + (connectionInstance.timeout).minutes
    println "I will send the job at $sendTime"
}
ReportSmssyncTimeoutJob.schedule(sendTime, [connectionId:params.id])

この設定では、ジョブは「sendTime」まで待機するのではなく、実際にはすぐにトリガーされることがわかりました。

プラグインソースを確認した後の2番目の試みは、SimpleTriggerを使用することでした。

def sendTime = new Date()
use(groovy.time.TimeCategory) {
    sendTime = sendTime + (connectionInstance.timeout).minutes
    println "I will send the job at $sendTime"
}
// arguments here are: jobKey='test', startTime=sendTime, repeatCount=0, repeatInterval=1 (zero not allowed), job-arguments)
def trigger = TriggerHelper.simpleTrigger(new JobKey("test"), sendTime, 0, 1, [connectionId:params.id])
ReportSmssyncTimeoutJob.schedule(trigger)

この設定では、ジョブもすぐにトリガーされます。SimpleTriggerの実装に何か問題があり、startDateまで待機できませんか?

残念ながら、メインの「quartz」プラグイン(Quartz 2をサポートするようになりました)に切り替えることはできません。quartz2プラグインで動作するように設定されたジョブがたくさんあるプロジェクトに取り組んでいるからです。

4

1 に答える 1

1

Grailsメーリングリストでこれを尋ねたところ、答えが得られました。これは、quartz2プラグインのバグです。次のリリースで修正されるはずです(バグは0.2.3で指摘されました)。

更新:これをquartz2プラグインのv2.1.6.2でテストし、私の質問の両方のアプローチが機能することを確認できます。

于 2013-01-25T14:24:39.023 に答える