Grails - 在预定作业中使用cron表达式的属性值

时间:2013-09-04 11:59:45

标签: grails cron quartz-scheduler

使用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触发器?

1 个答案:

答案 0 :(得分:1)

只是碰到了这个,并且将调度添加到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)
    }
}