如何在开始施药时避免石英启动

时间:2012-09-24 15:12:45

标签: grails groovy quartz-scheduler

我在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 fire,所以删除它完美,对不起再次。

1 个答案:

答案 0 :(得分:5)

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

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

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

jobs课程中,您还可以在触发器上设置startDelay

static triggers = {
    cron name: 'myTrigger', startDelay: 5000, cronExpression: '0 15 2 * * ?'
}