4

Quartz2 プラグインを使用する GRAILS の単純なアプリケーションがあります。ジョブファイルには次のものがあります。

static triggers = {
    simple repeatCount: 0 // execute job once in 5 seconds
    cron cronExpression: '0 15 2 * * ?'
}

def execute() {
    if (Environment.current == Environment.PRODUCTION)
        do something...
}

この場合、すべてが正常に機能します。本番環境にない場合、トリガーは無視されます。質問は簡単です。プロダクションでアプリケーションを起動すると、grails が起動するとすぐにジョブが開始されます。アプリが起動するとすぐにジョブが実行されるのを避けたいのですが、cronExpression で正しく設定されている場合に限ります。

何か案が?

更新: 最後に、次の行を config.groovy に入れました。

environments {
    development {
       grails.logging.jul.usebridge = true
       grails.plugin.quartz2.autoStartup = false
    }
    production {
      grails.logging.jul.usebridge = false
  }  
}

今はブートストラップから始めていないようです。さらにいくつかのテストを行う必要があります。お知らせします。

ありがとうございました

更新 2: スケジュールがまったく開始されません。スケジュールが開始されることを期待していましたが、スケジュールされたジョブを実行せず、適切なタイミングでトリガーするのを待ちます。何か助けはありますか?

どうもありがとう

更新 3: 申し訳ありませんが、起動時に単純な repeatCount:0 の発火を 1 回追加するので、完全に機能することを削除して、もう一度申し訳ありません。

4

1 に答える 1

5

を設定することconf\QuartzConfig.groovyで、ジョブ スケジューリングが自動的に開始する環境を制御できます。例えば:

quartz {
    autoStartup = true
    jdbcStore = false
    waitForJobsToCompleteOnShutdown = true
}

environments {
    development {
        quartz {
            autoStartup = false
        }
    }
}

jobsクラスではstartDelay、トリガーに a を設定することもできます

static triggers = {
    cron name: 'myTrigger', startDelay: 5000, cronExpression: '0 15 2 * * ?'
}
于 2012-09-24T15:39:55.673 に答える