1. 简介
- cron 是已经存在很长时间的Unix的一个工具, 它的功能很强大, 也得到了时间的证明. Quartz 的CronTrigger 也是基于cron 进行调度的
- CronTrigger 使用cron 表达式来定义调度的时间规则
- cron 表达式功能时非常强大的, 也是非常复杂的, 由六段或七段组成, 容易产生困惑.
2. cron 表达式格式
cron 表达式由空格分割的六段或七段组成, 每一段代表的时间单位不同, 取值也有所不同.
- 星期缩写: SUN, MON, TUE, WED, THU, FRI ,SAT
- 月份缩写: JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
2.1 字段取值范围
序号 | 含义 | 取值范围 | 允许特殊字符 |
---|---|---|---|
1 | Seconds(秒) | 0-59 | , - * / |
2 | Minutes(分) | 0-59 | , - * / |
3 | Hours(时) | 0-23 | , - * / |
4 | Day-of-Month(日) | 1-31 | , - * ? / L W LW |
5 | Month(月) | 0-11, 或JAN-DEC | , - * / |
6 | Day-of-Week(星期) | 1-7(1代表周日), 或SUN-SAT | , - * ? / L # |
7 | Year(年) | , - * / |
2.2 特殊符号
- * : 表示该字段每一单位都会执行一次. 如果在Minutes位, 则表示每一分钟; 如果在Hours位, 则表示每一小时…
- , : 用于列举枚举多个具体的值, 中间不能有空格. 如:“MON,WED,FRI” 表示每周一, 周三, 周五; “JAN,MAR,MAY” 表示一月, 三月, 五月
- - : 用于表示连续范围.如"1-3"在Hours位,表示1点, 2点, 3点
- / : 用于指定以某一时间点开始, 固定增量触发. 如Minutes位 15/20 表示每小时的15分, 35分, 55分触发一次, 并不是不是说每隔20分钟触发
- ? : 用于限制Day-of-Month 和 Day-of-Week 只能选择一种方式, 只能位于这两个位置, 且这两个位置有且只能有一个位置时?
- L : 表示最后, 只能位于Day-of-Month 和 Day-of-Week, 不同的位置意义不同
- Day-of-Month: L 表示本月最后一天,3月是31日, 4月是30日; L-3 表示本月倒数第三天
- Day-of-Week: L 表示每周周最后一天, 即本月每个周六; FRIL 则表示本月最后一个周五.
- # : 表示每个月的第几个星期几, 只能位于 Day-of-Week. 如FRI#3 表示本月第三个周五
- W : 表示工作日, 即周一到周五, 只能位于 Day-of-Month. 和数字连用时, 如15W表示距离15号最近的一个工作日
- LW: 表示最后一个工作日, 只能位于Day-of-Month.
3. 常用cron 表达式举例
笔者参考官方文档以及个人日常使用整理一些常用的cron 表达式.
cron | 描述 |
---|---|
0 0 12 * * ? | 每天12:00 触发一次 |
0 15 10 ? * * | 每天10:15 触发一次 |
0 15 10 * * ? 2019 | 2019年每天10:15触发一次 |
0 * 14 * * ? | 每天14点的每分钟触发一次 |
0 0/25 14 * * ? | 每天14点每隔25分钟触发, 触发时间点14:00, 14:25, 14:50 |
0 0/25 14,18 * * ? | 每天14点, 18点每隔25分钟触发, 触发时间点14:00, 14:25, 14:50 ,18:00, 18:25, 18:50 |
0 0/25 14,15 * * ? | 每天14点到18点之间, 每小时的00, 25, 50 分钟执行一次. 并非是从14点开始每隔25分钟执行一次; 触发时间点14:00, 14:25, 14:50 ,15:00, 15:25, 15:50 |
0 0-5 14 * * ? | 每天14点0分钟到5分钟每分钟触发一次, 触发时间点14:00, 14:01, 14:02, 14:03, 14:04, 14:05 |
0 15,45 15 ? 3 WED | 3月的每周三15点15分和15点45触发 |
0 15 10 ? * MON-FRI | 每周一到周五10点15触发 |
0 15 10 ? * SAT,SUM | 每周六周日10:15触发 |
0 15 10 L * ? | 每个月最后一天的10:15 触发 |
0 15 10 L-3 * ? | 每个月倒数第三天的10:15触发 |
0 15 10 LW * ? | 每个月最后一个工作日的10:15触发 |
0 15 10 W * ? | 每个工作日的10:15触发 |
0 15 10 ? * L | 每周六的10点15触发 |
0 15 10 ? * 6L | 每个月最后一个周六的10点15触发 |
0 15 10 ? * 6#3 | 每个月第三个周六的10点15触发 |
0 0 12 1/5 3 ? | 3月1号开始每隔5天12点触发 |
来源:https://blog.csdn.net/zongf0504/article/details/89241414