如何配置Quartz Scheduler实现7:30启动的每4小时运行定时任务
Quartz Scheduler 定时调度规则配置方案
以下为两个需求对应的配置方案,均基于Quartz标准Cron表达式实现:
1. 每日7:30起每4小时运行一次
配置规则
Cron表达式:0 30 7/4 * * ?
规则说明
Quartz Cron表达式从左到右依次为秒 分 时 日 月 周 年(可选),该表达式含义如下:
- 秒位为
0:固定在每分钟的0秒触发 - 分位为
30:固定在每小时的30分触发 - 时位为
7/4:从每日7点开始,每间隔4小时触发一次 - 日、月位为
*:表示所有日期、月份均生效 - 周位为
?:表示不指定周规则,避免和日位规则冲突
Java 代码配置示例
Trigger dailyTrigger = TriggerBuilder.newTrigger() .withIdentity("dailyTrigger", "businessGroup") .withSchedule(CronScheduleBuilder.cronSchedule("0 30 7/4 * * ?")) .build();
触发时间示例
每日将在7:30、11:30、15:30、19:30、23:30各触发一次,次日自动循环。
2. 仅工作日7:30起每4小时运行一次
配置规则
Cron表达式:0 30 7/4 ? * MON-FRI
规则说明
与每日规则的差异仅为调整了日位和周位规则:
- 日位为
?:不指定日期规则,避免和周规则冲突 - 周位为
MON-FRI:仅周一到周五(工作日)生效,也可写为数字格式2-6(Quartz中周数字规则为1=周日,2=周一,7=周六)
Java 代码配置示例
Trigger workdayTrigger = TriggerBuilder.newTrigger() .withIdentity("workdayTrigger", "businessGroup") .withSchedule(CronScheduleBuilder.cronSchedule("0 30 7/4 ? * MON-FRI")) // 如需指定时区避免偏差可添加以下配置,示例为东八区 // .inTimeZone(TimeZone.getTimeZone("Asia/Shanghai")) .build();
注意事项
- 上述Cron规则仅支持自然周的周一到周五过滤,若需要排除春节、国庆等法定节假日,需要额外实现Quartz的
Calendar接口自定义日期过滤逻辑,将节假日加入排除列表后绑定到Trigger即可。
内容的提问来源于stack exchange,提问作者Ashok
相关产品推荐
相关产品推荐

