Quartz.Net CronExpression触发时间不符合预期,求正确配置表达式
Quartz.Net 定时任务Cron表达式问题解决
问题原因
你使用的0 */9 * ? * * *表达式中,分钟位的*/9逻辑是匹配每个小时内分钟数为9的倍数的时间点(即0分、9分、18分……54分),而非从上一次触发时间累加9分钟,所以跨小时后会跳转到下一小时的0分触发,不符合你的预期。
解决方案
方案1:使用SimpleTrigger(推荐)
固定间隔调度更适合用SimpleTrigger实现,它会严格从上一次触发时间累加间隔时长:
var trigger = TriggerBuilder.Create() .WithIdentity("intervalTrigger", "taskGroup") .StartAt(new DateTimeOffset(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 21, 45, 0)) // 设置首次触发时间 .WithSimpleSchedule(schedule => schedule .WithIntervalInMinutes(9) .RepeatForever()) .Build();
方案2:自定义Cron表达式(仅适配固定首次触发时间)
如果必须使用Cron表达式,需根据首次触发的分钟值,枚举所有符合9分钟间隔的分钟点。比如首次触发是21:45,对应的Cron表达式为:
0 45,54,3,12,21,30,39,48 * ? * * *
这种方式的局限性是:如果首次触发时间改变,需要重新调整分钟位的枚举值。
内容的提问来源于stack exchange,提问作者kefa
相关产品推荐
相关产品推荐

