Cron表达式有以下两种语法格式:
1. Seconds Minutes Hours DayofMonth Month DayofWeek Year
2. Seconds Minutes Hours DayofMonth Month DayofWeek
Month取值:
1. 一月:JAN或0
2. 二月:FEB或1
3. 三月:MAR或2
4. 四月:APR或3
5. 五月:MAY或4
6. 六月:JUN或5
7. 七月:JUL或6
8. 八月:AUG或7
9. 九月:SEP或8
10. 十月:OCT或9
11. 十一月:NOV或10
12. 十二月:DEC或11
DayofMonth取值:
1. 数字
2. 表示最后:L
3. 有效工作日(周一至周五):W (系统将在离指定日期最近的有效工作日执行。比如5W,如果5日是工作日,则在当天触发;如果5日是周六,则会延期在周一触发。注意:W不会跨月。比如30W,30号是周六,则不会顺延至下周一来执行)
DayofWeek取值:
1. 周日:SUN或1
2. 周一:MON或2
3. 周二:TUE或3
4. 周三:WED或4
5. 周四:THU或5
6. 周五:FRI或6
7. 周六:SAT或7
8. 表示最后:L
域中符号解释:
1. * :表示匹配任意值。比如在Seconds域中配置为*,则表示每秒执行。(可用于任意域)
2. ?:只能用在 DayofMonth和DayofWeek,表示匹配该域的任意值。
3. -:表示范围。例如:在Seconds域中配置2-10,则表示从2到10秒内,每秒执行。
4. /:表示从起始开始触发,然后每个固定时间执行一次。比如在Seconds域中配置5/20,则表示在第5秒开始执行,然后每过20秒执行一次(以每一分钟为周期)。
5. ,:表示枚举值。例如在Seconds域中配置5,20,25,则表示在第5秒、20秒和25秒执行。
6. L:只能用在 DayofMonth和DayofWeek,表示每周或者每月的最后一天。如果DayofWeek域配置5L则表示最后一个星期的周四执行。
7. W:只能用在DayofMonth域,
Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("TriggerOfStartJobSyncBlockchainTask", TRIGGER_GROUP) .startNow() .withSchedule(CronScheduleBuilder.cronSchedule("0/60 * * * * ?")) // 间隔60秒运行一次 .build();
案例:
- "1 * * * * ?" //表示每分钟的第1秒执行
- "1,2,3,40,50 * ** * ?" //表示每分钟的第1、2、3、40、50秒执行
- "1-30 * * * * ?" //在1-30中每秒执行
- "* * * * * ?" //每秒循环
- "5/20 * * * * ?" // 从第5秒开始执行后,每过20秒执行一次(一分钟内)。分别在5,25,45秒执行
- "50 19 * * * ?" //每个小时的19分50秒执行
- "0 0/10 * * * ?" // 每10分钟执行一次
- "0 30 0/1 * * ?" // 每小时的第30分钟执行
- "0 38 15 * * ?" // 每日的15:38分钟执行
- "0 45 15 ? *MON-FRI" // 每周周一至周五的15:45分钟执行。注意:此时的DayofMonth域必须为?
- "0 50 15 ? *6,7" // 每周的周五和周六的15:47分执行
- "0 31 16 6 6 ?*" //每年的6月6号的16:31分执行
- "0 33 16 6 * ?" //每月的6号16:33分执行
- "0 33 16 6 1,8 ?" //每年第1月、8月 6号16:33执行