【学习笔记】@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表达式

  1. 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)
  1. 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

表达式生成器
如果想对cron有更多的了解可以看看这篇文章的最后一部分,挺不错的~

posted on 2020-10-24 11:08  单向箭头  阅读(130)  评论(0编辑  收藏  举报