定时任务就是“闹钟”的意思,每天在固定的时间执行一些操作。比如说,每天的0点,我要把缓存清理一下,把日志更新一下等,这时候就需要用到定时任务。
那么首先我们创建一个定时任务类Task
任务类上需要加@EnableScheduling注解来代表支持定时任务
或者在启动类上加@EnableScheduling注解
package com.ywt.mybatisplus.demo;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* @author pc
*/
@EnableScheduling //定时任务支持
@Component
public class Task {
}
方法上需要加@Scheduled来开启定时任务
package com.ywt.mybatisplus.demo;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* @author pc
*/
@EnableScheduling //开启定时任务
@Component
public class Task {
@Scheduled(fixedRate = 3000)
public void fixedRateTask(){
System.out.println("每隔3秒执行一次:" + LocalDateTime.now());
}
@Scheduled(fixedDelay = 5000)
public void fixedDelayTask(){
System.out.println("每隔5秒执行一次:" + LocalDateTime.now());
}
@Scheduled(cron = "0 0 0 * * ?")
public void cronTask(){
System.out.println("每天的0点执行一次");
}
}
然后里面的注解有两个属性,我们分别来讲一下它们的区别:
fixedRate 和 fixedDelay的值是毫秒,3000 = 3s(秒),意思是每3秒执行一次该方法,那么他们都可以执行,他们的区别在哪?
fixedRate为固定执行,意思就是不管有没有其他任务在调度,我到了我这个时间点,那我就执行。
fixedDelay为延迟执行,它执行的方式是,我到了我该执行的时间,但是有别的定时任务正在调度,我需要等它执行完以后我在执行
实际用到最多的还是cron表达式,比如我每天的几点几分要执行什么任务,用到的就是cron表达式,我们来说一下cron里面的几个参数是什么意思
# cron一共有7位,但是最后一位是年,可以留空,所以我们可以写6位
# 第一位:代表秒 取值 0-59
# 第二位:表示分,取值0-59
# 第三位:表示小时,取值0-23
# 第四位:日期天/日,取值1-31
# 第五位:日期月份,取值1-12
# 第六位:星期,取值1-7,星期一,星期二...,
注:不是第1周,第二周的意思另外:1表示星期天,2表示星期一。
这种表达式基本上不用自己写,需要的时候在网上搜一下就可以找到。
接下来为大家提供一些常用的定时任务表达式
表达式 | 描述 |
cron = "0 8 0 * * ? " | 每天的8点执行 |
cron = "0 30 8 * * ? " | 每天的8点30分执行 |
cron = "0 5/10 8 * * ?" | 每天8点的 5分,15分,25分,35分,45分,55分这几个时间点执行 |
cron = "0 10 8 ? * 2" | 每周星期天,8点10分执行,注:1表示星期天 7代表星期六 |