使用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触发器?
答案 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)
}
}