注解@Scheduled的定时任务配置
在SpringBoot为我们内置了@Scheduled定时任务,添加相应的注解即可开启定时任务。
在入口程序类添加注解@EnableScheduling开启功能自动扫描
新建一个任务类
要在任务的类上写@Component
要在任务方法上写@Scheduled
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; @Component public class Jobs { //表示方法执行完成后5秒 @Scheduled(fixedDelay = 5000) public void fixedDelayJob() throws InterruptedException { System.out.println("fixedDelay 每隔5秒" + new Date()); } //表示每隔3秒 @Scheduled(fixedRate = 3000) public void fixedRateJob() { System.out.println("fixedRate 每隔3秒" + new Date()); } //表示每天8时30分0秒执行 @Scheduled(cron = "0 0,30 0,8 ? * ? ") public void cronJob() { System.out.println(new Date() + " ...>>cron...."); } }
设置定时任务时间间隔的三种方式
fixedDelay
表示定时任务运行结束后才开始计时
fixedRate
与任务运行时长无关
cron时间表达式
设置每天或每小时每分钟等时间间隔来执行
cron表达式语法
[秒] [分] [小时] [日] [月] [周] [年]
cron一共有7位,但是最后一位是年,可以留空,所以我们可以写6位:
1 2 3 4 5 6 7 8 * 第一位,表示秒,取值0-59 * 第二位,表示分,取值0-59 * 第三位,表示小时,取值0-23 * 第四位,日期天/日,取值1-31 * 第五位,日期月份,取值1-12 * 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思 另外:1表示星期天,2表示星期一。 * 第7为,年份,可以留空,取值1970-2099
举例:
1 2 3 4 5 6 7 0 */5 * * * ? 每5分钟执行 0 0 3 * * ? 每天3点执行 0 5 3 * * ? 每天3点5分执行 0 5 3 ? * * 每天3点5分执行,与上面作用相同 0 5/10 3 * * ? 每天3点的 5分,15分,25分,35分,45分,55分这几个时间点执行 0 10 3 ? * 1 每周星期天,3点10分 执行,注:1表示星期天 0 10 3 ? * 1#3 每个月的第三个星期,星期天 执行,#号只能出现在星期的位置
参考原文