【学习笔记】@Scheduled注解 实现定时任务
前言
定时任务的实现方式有很多种,这里以Spring的注解@Scheduled为例,进行说明。
实战
在Spring项目和SpringBoot项目中配置略有差别,具体可以参看Spring的@Scheduled注解实现定时任务,这里只记载SpringBoot的使用.
添加@EnableScheduling
在SpringBoot的启动类上添加@EnableScheduling注解,否则@Scheduled注解无法生效。
@EnableScheduling
@SpringBootApplication
public class TransactionDemoApplication {
public static void main(String[] args) {
SpringApplication.run(TransactionDemoApplication.class, args);
}
}
添加@Scheduled注解
@Component
public class ScheduledTask {
/**
* 调用频率5s/次;
*/
@Scheduled(cron = "0/5 * * * * ?")
public void sayHello() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = simpleDateFormat.format(new Date());
System.out.println(time + " Hello ,ScheduledTask~~");
}
}
运行结果
2020-54-24 10:54:05 Hello ,ScheduledTask~~
2020-54-24 10:54:10 Hello ,ScheduledTask~~
2020-54-24 10:54:15 Hello ,ScheduledTask~~
2020-54-24 10:54:20 Hello ,ScheduledTask~~
2020-54-24 10:54:25 Hello ,ScheduledTask~~
2020-54-24 10:54:30 Hello ,ScheduledTask~~
2020-54-24 10:54:35 Hello ,ScheduledTask~~
2020-54-24 10:54:40 Hello ,ScheduledTask~~
2020-54-24 10:54:45 Hello ,ScheduledTask~~
初识Cron表达式
要灵活应用定时任务需要会使用cron表达式
- cron一共有7位,但是最后一位是年(1970-2099),可以留空,所以我们可以写6位,按顺序依次为
- 秒(0~59)
- 分钟(0~59)
- 小时(0~23)
- 天(月)(0~31,但是你需要考虑你月的天数)
- 月(0~11)
- 星期(1~7 1=SUN,MON,TUE,WED,THU,FRI,SAT)
- cron的一些特殊符号
- (*)星号:
可以理解为每的意思,每秒,每分,每天,每月,每年… - (?)问号:
问号只能出现在日期和星期这两个位置,表示这个位置的值不确定,每天3点执行,所以第六位星期的位置,我们是不需要关注的,就是不确定的值。同时:日期和星期是两个相互排斥的元素,通过问号来表明不指定值。比如,1月10日,比如是星期1,如果在星期的位置是另指定星期二,就前后冲突矛盾了。 - (-)减号:
表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12 - (,)逗号:
表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期一,星期二,星期四 - (/)斜杠:如:x/y,x是开始值,y是步长,比如在第一位(秒) 0/15就是,从0秒开始,每15秒,最后就是0,15,30,45,60 另:*/y,等同于0/y
认真生活,好好工作~