Grails 数据库中的 Quartz cronExpression

Quartz cronExpression from database in Grails

我在我的 grails:2.4.4 应用程序中添加了 quartz:1.0.2 插件。

我想要实现的是设置数据库中的 cronExpression 值。

我从 grails-command 创建了一个名为 myBatch 的作业。在 myBatchJob.groovy 的触发器块中,如果我尝试从数据库中获取任何数据,它是不允许的。

我还尝试在 BootStrap.groovy

中添加以下内容
def quartzScheduler
def init = { servletContext ->
    CronTrigger trigger = quartzScheduler.getTrigger("myBatchJobTrigger","DEFAULT")

    def conf_expr = Configuration.findByConfigKey("batch_job_config_expression").configValue

    trigger.setCronExpression '${conf_expr}'
    quartzScheduler.rescheduleJob (trigger.getName(), trigger.getGroup(), trigger)
}

但是它给我这个错误

groovy.lang.MissingMethodException: No signature of method: org.quartz.impl.StdScheduler.getTrigger() is applicable for argument types: (java.lang.String, java.lang.String)

上面代码中,Configuration是域,有两个字段configKey和configValue。我也导入了 org.quartz.CronTrigger 但没有成功。

请帮忙!

从您的作业文件中删除 triggers closure。然后在 BootStrap.groovy 中,您可以从数据库中获取 cron expression 并使用动态调度方法安排您的作业。例如,您的 BootStrap.groovy init 闭包可以像下面这样

    Configuration config = Configuration.findByConfigKey("batch_job_config_expression")
    MyBatchJob.schedule(config.configValue)

有关动态调度的更多信息http://grails-plugins.github.io/grails-quartz/guide/triggers.html