4

我在 GRAILS 中有一个使用 Quartz2 插件的简单应用程序。在工作文件中,我有:

static triggers = {
    simple repeatCount: 0 // execute job once in 5 seconds
    cron cronExpression: '0 15 2 * * ?'
}

def execute() {
    if (Environment.current == Environment.PRODUCTION)
        do something...
}

在这种情况下一切正常,如果它不在生产中,则忽略触发器。现在问题很简单,如果我在生产环境中启动应用程序,那么只要 grails 启动,工作就会开始。我希望避免在应用程序启动后尽快运行作业,但前提是在 cronExpression 中正确设置。

任何想法?

更新:最后我把这一行放在 config.groovy 中:

environments {
    development {
       grails.logging.jul.usebridge = true
       grails.plugin.quartz2.autoStartup = false
    }
    production {
      grails.logging.jul.usebridge = false
  }  
}

现在似乎不是从引导程序开始我必须做更多的测试,我让你知道。

谢谢你

UPDATE2:好的,现在计划根本没有开始,我期待它开始但不执行计划的作业,而是等待正确的时间来触发它。有什么帮助吗?

多谢

UPDATE3:对不起,但我觉得很愚蠢,在启动时添加简单的 repeatCount:0 火,所以删除它可以完美运行,再次抱歉。

4

1 回答 1

5

通过设置conf\QuartzConfig.groovy,您可以控制作业调度自动启动的环境。例如:

quartz {
    autoStartup = true
    jdbcStore = false
    waitForJobsToCompleteOnShutdown = true
}

environments {
    development {
        quartz {
            autoStartup = false
        }
    }
}

在您的jobs课堂上,您还可以startDelay在触发器上设置 a

static triggers = {
    cron name: 'myTrigger', startDelay: 5000, cronExpression: '0 15 2 * * ?'
}
于 2012-09-24T15:39:55.673 回答