4

Grails 用の Quartz プラグインを使用しており、単純な仕事をしています。

class MyJob{

   static triggers = {
       cron name: 'MyJobTrigger', cronExpression: '0 0/1 * * * ?'
   }
   def execute(){
       println "do some work"
   }
}

すべてが正常に機能し、期待どおりに毎分ジョブが起動します。

ここで、さまざまな環境でオーバーライドできるように、cron 式をプロパティ駆動型にしたいと考えています。したがって、Config.groovy にはデフォルト値が含まれています。

myJob.cron = '0 0/1 * * * * ?'

そして、クラスを次のように変更します。

   GrailsApplication grailsApplication

   static triggers = {
       cron name: 'MyJobTrigger', cronExpression: grailsApplication.config.myJob.cron
   }

コードを実行すると、次のエラーが発生します。

Caused by MissingPropertyException: No such property: grailsApplication for class: MyJob

これが MyJob クラスのロード/初期化の方法に関係していると仮定すると、GrailsApplication が注入される前に作成された静的トリガー??? この GrailsApplication の使用は、プロジェクト プロパティを取得する通常の方法です。

プロパティ駆動型の cron トリガーを他にどのように設定できますか?

4

1 に答える 1

3

私はちょうどこれに遭遇し、スケジューリングを Bootstrap.groovy に追加するとうまくいきました。MyJob クラスで、トリガーを空のクロージャーに設定します。

class MyJob {

   static triggers = {
        // Job is scheduled in Bootstrap.groovy so that it can be externalized
    }

   def execute() {
       println "do some work"
   }
}

次に、Bootstrap.groovy ファイルで、次のように設定します。

class BootStrap {

    def grailsApplication

    def init = { servletContext ->
        MyJob.schedule(grailsApplication.config.myJob.cron)
    }
}
于 2013-09-04T14:05:44.143 に答える