Java环境下Quartz CronTrigger每8小时执行配置失效问题
Quartz Cron表达式配置错误排查与修复
你的问题出在Cron表达式的分钟位取值超出范围,导致Quartz解析异常,最终任务每小时执行一次。
问题分析
你配置的表达式0 0/480 * * * ?中,第二个位置是「分钟位」,该位置的合法取值范围是0-59。0/480表示从0分开始,每隔480分钟执行一次,但480远大于分钟位的最大值59,Quartz会将这个步长视为无效,实际解析为「每小时的0分执行一次」,也就是每小时运行一次任务。
正确配置
要实现每8小时执行一次,应该将步长设置在「小时位」,正确的Cron表达式为:
trigger.setCronExpression("0 0 */8 * * ?");
表达式解释
Cron表达式各位置含义(从左到右):
0:秒位,固定在0秒执行0:分钟位,固定在0分执行*/8:小时位,从0点开始,每隔8小时执行一次*:日位,每天都执行*:月位,每月都执行?:星期位,不指定星期(避免与日位冲突)
修改后的完整代码
CronTrigger trigger = new CronTrigger(); trigger.setName("data-checks-job"); trigger.setStartTime(CommonUtil.getBeforeTimeInHour("1", "yyyy/MM/dd-HH:mm:ss")); trigger.setCronExpression("0 0 */8 * * ?");
内容的提问来源于stack exchange,提问作者Nitish K
相关产品推荐
相关产品推荐

