如何编写Cron表达式实现每日9:30、10:00执行定时任务
Cron表达式实现每日9:30、10:00定时触发方案
原写法错误原因
你之前编写的0 30/30 9-10 * * ?不符合预期的核心原因是步长匹配逻辑:该表达式会匹配9点、10点两个小时内,从每小时第30分钟开始每30分钟的时间点,实际命中9:30、10:30两个时刻,间隔1小时,和需求不符。
额外需要注意:Cron表达式不同字段的多值枚举默认是笛卡尔积匹配规则,如果直接写0 0,30 9,10 * * ?,会命中9:00、9:30、10:00、10:30四个时刻,多触发两次,也不符合要求。
正确实现方式
通用稳妥方案(全Cron实现兼容)
拆分两个独立的Cron表达式进行配置,不会因为框架实现差异出现匹配偏差,是生产环境推荐的写法:
- Quartz生态(带秒位,适用于Java Spring、XXL-JOB等大部分Java定时任务框架)
- 9:30触发:
0 30 9 * * ? - 10:00触发:
0 0 10 * * ?
- 9:30触发:
- Linux Crontab(无秒位5位格式,适用于Linux系统自带定时任务)
- 9:30触发:
30 9 * * * - 10:00触发:
0 10 * * *
- 9:30触发:
单配置项写法(框架支持多表达式分隔时可用)
如果你使用的定时任务框架支持在单个配置项中用分号分隔多个Cron表达式,可以直接合并写为:0 30 9 * * ?;0 0 10 * * ?
注意:该写法不是标准Cron语法,仅部分框架做了扩展支持,使用前请先确认你所用框架的能力,避免匹配失效。
内容的提问来源于stack exchange,提问作者ravi
相关产品推荐
相关产品推荐

