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

Grails-在计划作业中使用cron表达式的属性值,grails,cron,quartz-scheduler,Grails,Cron,Quartz Scheduler,我正在使用Grails的Quartz插件,有一个简单的工作: class MyJob{ static triggers = { cron name: 'MyJobTrigger', cronExpression: '0 0/1 * * * ?' } def execute(){ println "do some work" } } 一切正常,工作按预期每分钟进行 现在我希望cron表达式是属性驱动的,以便可以在不同的环境中重写。因此Conf

我正在使用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触发器呢?

我刚刚遇到了这个问题,将调度添加到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)
    }
}

这看起来确实可行,但ConfigurationHolder被标记为已弃用,并带有一条注释“改用依赖项注入”。关于替代方案有什么建议吗?像以前一样使用
def grailsApplication
grailsApplication.config…
,但在bootstrapt中这不起作用。我得到一个“无属性MyJob for class BootStrap”运行时错误。即使我知道你在用什么插件?我刚拿到石英1.0-RC9。MyJob是grails app/jobs/myApp下的一个groovy类,插件的create job命令就是在这个类中创建它的。schedule方法是静态的,因此您应该使用类名(假设您使用大写字母命名该类,则第一个字母大写)来调用它。此外,我使用的插件和版本与您相同。Quartz 1.9-RC9。我尝试了你的方法,但在引导上它显示了一个错误(没有这样的属性myjob)。在引导编译器上导入类作业时显示红线