我在Grails应用程序中有下一个Quartz Job。该工作计算一些统计数据,并发送和发送电子邮件与这些统计数据。我希望这份工作每天7点执行。
我的问题是每天工作三次而不是一次。
class DailyEmailJob {
def eventService
static triggers = {
cron name: 'emailTrigger', cronExpression: "0 0 7 * * ?"
}
def execute() {
eventService.send24StatsEmail()
}
}
我在Apache Tomcat / 7.0.35中托管Grails应用程序,运行Grails 2.2.1和quartz-1.0-RC6
答案 0 :(得分:2)
修改强>
以下分析不在此方案中保持良好状态。这只是一个基于原始误解事实的假设。如果建议,我可以删除答案。
<强> END 强>
我希望我能回答我在评论中提出的问题。
“除了上午7点以外它会触发什么次?”
上午7点, 2 PM 和 9 PM ?
<强>原因:强>
quartz
的{{1}}插件[quartz-1.0-RC6]的版本。请参阅BuildConfig.groovy from Github。org.quartz-scheduler:quartz:1.8.4
API
突出重要的措辞: -
“'/'字符用于指定增量。例如,秒字段中的”0/15“表示”秒0,15,30和45“。和”5/15“in秒字段表示“秒5,20,35和50”。在'/'之前指定'*'等同于指定0是要开始的值。基本上,对于表达式中的每个字段,有一个可以打开或关闭的一组数字。对于秒和分钟,数字范围从0到59.对于0到23小时,0到31个月以及1到12个月。 “/”字符只是帮助你打开给定集合中的每个“第n”值。因此月份字段中的“7/6”仅打开月份“7”,这并不意味着每6个月,请注意细微之处。 强> “
在您的情况下,cron表达式:CronExpression
导致在24小时(每天)每7小时运行一次作业,导致在上午7点(7 + 7)下午2点运行,(7 + 7 + 7)晚上9点。
来自"0 0 7 * * ?"
的最新文档另有说法。看一下示例here。还要学习“特殊字符/”。
基于我对quartz-scheduler.org
和seconds
的测试[我不想等待24小时测试:)],我强烈认为下面的minutes
会起作用并触发每天cronExpression
完全execute()
:
<强>答案:强>
7:00 Hrs
[从第7小时第0小时开始每隔24小时开始工作] "0 0 7/23 * * ?"
[同义回答1但不那么详细。] 让我们知道您的测试结果。我坚信这会奏效。我还要将调度程序设置为白天/晚上,以便在24小时后测试结果(我不想篡改JVM时钟以获得清晰的结果,尽管我成功测试了同样的篡改。) 。将发布我的实际测试结果。
答案 1 :(得分:2)
你的cron表达式看起来不错。 Tomcat的自动部署功能可能是罪魁祸首。有关建议,请参阅:https://stackoverflow.com/a/11990221
答案 2 :(得分:1)
这就是文档所说的
每周或每周都必须是&#34;?&#34;,否则您将收到错误,因为底层库的支持尚未完成。因此,您无法指定两个字段,也不能将两者都保留为所有值通配符&#34; *&#34 ;;这与unix crontab规范背道而驰。
希望有所帮助