cron表达式详解

176 阅读3分钟

本文规则相关内容大部分来自于 Quartz 官方,SpringBoot 和 TeamCity 等软件的 cron 规则都来自于此。

1. cron 表达式在线生成地址

qqe2.com/cron

2. 语法说明

说明:下列可选值中字母部分是不区分大小写的

字段含义分钟星期几年(可选)
可选值0-590-590-231-311-12 or JAN-DEC1-7 or SUN-SAT空 或者 1970-2099
可选符号, - * /, - * /, - * /, - * / ? L W, - * /, - * ? / L #, - * /

特殊符号说明

符号说明
*表示可以是任意值
-表示范围值,比如:在第三位(时)上的 10-12,就是指 10 点、11 点、12 点 3 个时间点
,表示枚举,比如:在第一位(秒)上的 5,6,9,18 就是指在每分钟的第 5 秒、第 6 秒、第 9 秒、第 18 秒分别执行
/表示从起始时间,每隔多长时间执行一次,比如:在第一位(秒)上的 3/20 就是在每分钟的第 3 秒,第 23 秒、第 43 秒分别执行
?当星期 和日两个日期设定的日期有可能冲突,为了解决这个问题,对于无所谓的那个字段,使用?来避免冲突
L表示最后。默认是指定月份的最后一天或者星期日。如果在星期上使用 6L,表示:最后一个星期五 **(这个和其他有区别,需要注意)**如果使用 L-3,表示:表示日历月的第三条到指定月份的最后一天
W用于指定工作日(周一至周五)。比如:15W,表示离每月15日最近的工作日”。如果 15 日是工作日,那么将在 15 日触发;如果 15 日是周六,那么在将在 14 日周五触发;如果 15 日是周日,那么将在 16 日周一触发;注意:假设设定为 1W,并且第一天是周六,那么将在第三天的周一触发,因为它不会“跳过”一个月的天数边界。只有当月份中的某一天是一天,而不是一个日期范围或列表时,才能指定“W”字符。另外: LW 可以混用,表示最后指定月份的最后一个星期
#用于指定一个月的第几个星期几。比如:6#3表示“每月的第三个星期五”(第6天=星期五,“#3”=每月的第3个星期五)。注意,如果您指定了“#5”,并且该月没有第 5 周,那么就不会被触发。

3. example

3.1. cron 示例

cron 表达式说明
0 15 10 * * ? 2005触发时机:在 2005 年的每天的 10:15
0/5 * 14,18 * * ?触发时机:每天下午 2:00:00-2:59:55 和下午 6:00:00-6:59:55 中从第 0 秒开始,在这两个时间范围内每 5 秒执行一次
0 15 10 ? * 6L 2002-2005触发时机:在 2002,2003,2004,2005 年的每个月的最后一个周五的 10:15
0 15,17 10 ? * 6#3触发时机:在每个月第三周周五的 10:15 和 10:17

3.2. SpringBoot 使用 demo

/*   启动类  */
@EnableScheduling // 配置启动定时任务
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

    }
}

/*     定时任务执行类      */
@Component
public class TaskTestService {
    @Scheduled(cron = "*/2 * * * * ?")
    public void test(){
        System.out.println("当前任务执行时间"+ LocalDateTime.now());
    }
}

参考文档

www.quartz-scheduler.org/documentati…