1. 概念:Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
2. Cron表达式结构:Cron 从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份
3. 在线生成cron表达式:http://cron.qqe2.com/
4. Cron各字段含义:
注意:星期和日是冲突的,因此有星期数了,就不能有日
通用符号:,- * /
, : 表示枚举值。例如:在Minuttes域使用5,20,表示在时间的分钟数为5,20时触发事件
- : 表示范围。例如在Minutes域使用5-20,表示在时间的分钟数为5-20时每分钟都触发事件
* : 表示匹配该域的任意值,假如在Minutes域使用,表示时间分数不做限制。没分钟都触发
/ : 表示其实开始时间触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,表示分钟数为5时触发一次,后隔20分钟即25,45再分别触发一次事件。
eg: 0 0 2 1 * ? //表示每个月的1号的2点执行
eg: 0 10,44 14 ?3 WED //在每年的3月份星期三的14点的10分和44分0秒执行一次
专有符号:
?: 只能使用在DayofMonth和DayofWeek两个域,由于DayofMonth和DayofWeek互斥,必须对其一设置
L: 表示最后,只能出现在DayofWeek和DayofMonth域,如果DayofWeek域使用5L(从星期日计数),意味着在最后的一个星期四触发。
w: 表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在指定日期的最近有效工作日触发事件。
eg: 5w //表示在每个月的5号的最近的一个工作日执行
LW: 这两个可以连用,表示在某个月最后一个工作日
#; 用于确定每个月星期几,只能出现在DayofWeek域,例如4#2表示在每个月的第二个星期三执行
*/2 * * * * ? 或 0/2 * * * * ? //每两秒执行一次
0 0 1 1 * ? * //每月的1日的凌晨1点执行
0 0 9,12,17 * * ? //每天上午9点,下午12点,17点执行
0 10 12 * * ? 或 0 10 12 ? * * 或 0 10 12 * * ? * //每天上午12:10执行
0 30 1 L * ? //每月最后一日的凌晨1:30执行
0 0 12 ? * WED //每周三中午12点执行
//开启支持定时任务
@EnableShceduling
package com.itheima.reggie;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
//开始支持定时任务功能
@EnableScheduling
//启动类
@SpringBootApplication
//打印日志
@Slf4j
public class ReggieApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieApplication.class,args);
log.info("》》》》》》》》》》》》》》》》》》项目启动成功《《《《《《《《《《《《《《《《《《《");
}
@Scheduled(cron = "* * 8,12,19 * * ? ")
public void takeMedicine(){
log.info("该吃药了.................");
}
@Scheduled(cron = "* * 0/2 * * ? *")
public void drinkWater(){
log.info("该喝水了...............");
}
}