Cron表达式
接触cron表达式是在Sping boot定时任务中,cron表达式代表了一个时间,可在定时任务中代表任务的执行执行周期。
组成
cron表达式一般由5个或者6个空格组成,组成6或者7个域,每个与中由一些数字/符号按照一定规则组成。这组字符串中表达了时间的信息。
每个域分别代表一个时间单位,如:
A B C D E F -> 秒 分 时 日 月 星期
A B C D E F G -> 秒 分 时 日 月 星期 年
A表示秒,B表示分,C表示小时,D表示日,E表示月,F表示星期,G表示年
在日常的使用中,年为单位执行任务不常用,因此G也可以省略
常用符号
符号 | 含义 |
---|---|
x/y | x代表开始值,y是步长,即从x开始,每y执行一次 |
A-B | 从时间段A到B |
星期 | 星期英文前三个字母大写,如星期一 MON |
L | Last,表示最后 |
? | 不说明是星期几,用问号代替 |
a,b | 逗号表示列表值 |
* | 每 |
程序中调用方式
@Configuration
@EnableScheduling
public class SaticScheduleTask {
@Scheduled(cron = "0/5 * * * * ?")
// 或直接指定时间间隔,例如:5秒
// @Scheduled(fixedRate=5000)
private void configureTasks() {
. . .
}
}
@Configuration
表示这是一个配置类,兼备Component的效果。@EnableScheduling
表示开启定时任务。@Scheduled(cron = "0/5 * * * * ?")
表示添加定时任务——每隔五秒触发事件。
实例
// 1949年10月1日下午3点,开国大典时间
0 0 15 1 10 * 1949
// 每2小时第30分0秒执行
0 30 */2 * * ?
// 每个月最后一天的1到5点,然后这几个点内的每个0分1秒,0分3秒,0分5秒各执行一次。
1,3,5 0 1-5 L * ?
Linux中的crontab命令
在Linux中的crontab命令与上述有所不同,更加精简,由五部分+命令(command)组成
A B C D E command
其中 A 是表示分钟,B 表示小时,C 表示一个月份中的第几日,D 表示月份,E 表示一个星期中的第几天
// 每一分钟执行一次 /bin/ls
* * * * * /bin/ls
// 在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
// 周一到周五每天下午 5:00 寄一封信给 alex@domain.name
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
// 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha":
20 0-23/2 * * * echo "haha"