我在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,所以删除它完美,对不起再次。
答案 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 * * ?'
}