1.首页在启动文件里开启定时任务注解
@EnableScheduling
2.编写好定时任务类
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import java.time.LocalDateTime; /** * @author 兵兵有你 * @date 2021/10/11 0011 10:48 * @Email 1360968945@qq.com */ @Configuration @EnableScheduling //开启定时任务 //@EnableAsync //异步执行 public class StaticScheduleTask { //@Scheduled(cron = "0/5 * * * * ?") //执行方式1-每5秒1次 //@Async //异步执行 @Scheduled(fixedRate = 5000) //执行方式2 -每5秒一次 public void configureTasks(){ System.out.println(Thread.currentThread()+"执行任务的时间是"+ LocalDateTime.now()); } }
如果开启了异步执行,每次定时任务都会开启一个新线程
按顺序依次是:秒、分、时、日、月、周,中间用空格间隔
月、周可以用数字或英文单词的前三个字母表示
日和周可能会冲突,因此两个可以有一个配置为?
常用通配符的含义:
表示任意值,例如在秒字段上设置,表示每秒都触发
?表示不指定值,只能出现在日或者周的位置,用于处理日和周可能存在的冲突,例如2020年8月15是周六,如果又在周的位置上指定为周一,那就会产生冲突到导致定时任务失效。如果我们不关心日或者周的时候,也可以将其设置为?
-表示时间区间,例如在秒上设置1-3,表示第1、2、3秒都会触发
/表示时间间隔,例如在秒上设置2/4,表示从第2秒开始每间隔4秒触发一次
,表示列举多个值,例如MON,WED,FRI表示周一、周三、周五触发
例如:
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?