Springboot基于@EnableScheduling注解实现定时任务(一)

一、定时任务
通过在配置类注解@EnableScheduling来开启对定时任务的支持,然后在要执行计划任务的方法上注解@Scheduled,声明这是需执行的定时任务!
二、注解描述
@EnableScheduling: 启动类里面使用@EnableScheduling 注解开启功能,开启自动扫描;
@Scheduled: 添加在需要执行的定时方法上,接下来描述一下@Scheduled参数的具体定义:

 1、fixedDelay和fixedRate,单位是毫秒;
      区别:fixedRate---,每多少毫秒执行一次,与具体业务执行时间没关系;而fixedDelay是当任务执行完毕后按照设定的毫秒值执行任务。所以根据实际业务不同,我们会选择不同的方式。
 2、cron表达式:依据业务需求,可设定具体的任务执行时间,预定时间一到就会自动执行;
   cron一共有7位,但是最后一位是年,可以留空,一般情况可以写6位:
   * 第一位,表示秒,取值0-59
   * 第二位,表示分,取值0-59
   * 第三位,表示小时,取值0-23
   * 第四位,日期天/日,取值1-31
   * 第五位,日期月份,取值1-12
   * 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思
          另外:1表示星期天,2表示星期一。
   * 第7为,年份,可以留空,取值1970-2099
 3、cron中,还有一些特殊的符号,含义如下:
   (*)星号:可以理解为每的意思,每秒,每分,每天,每月,每年...
   (?)问号:问号只能出现在日期和星期这两个位置。
   (-)减号:表达一个范围,如在小时字段中使用“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
 4、举例描述cron:
   0 0 8 * * ?     每天8点执行
   0 30 8 * * ?    每天8点30分执行
   0 30 5 ? * *    每天8点30分执行,与上面作用相同,区别特殊符号
   0 5/5 8 * * ?   每天8点的 5分,10分,15分,20分,35分,40分,45分,50分,55分这几个时间点执行
   0 30 8 ? * 1    每周星期天,8点30分 执行,注:1表示星期天    
   0 30 8 ? * 1#3  每个月的第三个星期,星期天执行,#号只能出现在星期的位置

三、Demo演示
DateUtils时间转换工具类

@EnableScheduling  //开启对定时任务的支持
@SpringBootApplication
public class BnlApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(BnlApplication.class, args);
    }
    //表示方法执行完成后5秒执行
    @Scheduled(fixedDelay = 6000)
    public void fixedDelayJob() {
        System.out.println("fixedDelay每隔6秒" +"-------"+ DateUtils.format(new Date()));
    }
   //当前任务每隔3秒执行一次
    @Scheduled(fixedRate = 3000)
    public void fixedRateJob() {
        System.out.println("fixedRate每隔3秒" +"-------"+ DateUtils.format(new Date()));
    }
    //表示每天19点42执行
    @Scheduled(cron = "0 42 19 * * ? ")
    public void cronJob() {
        System.out.println("cron每天19点42执行" + "------" + DateUtils.format(new Date()));
    }
}

四、运行结果

cron每天1942执行------2020-01-01 19:42:00
fixedRate每隔3-------2020-01-01 19:42:01
fixedRate每隔3-------2020-01-01 19:42:04
fixedDelay每隔6-------2020-01-01 19:42:04
fixedRate每隔3-------2020-01-01 19:42:07
fixedRate每隔3-------2020-01-01 19:42:10
fixedDelay每隔6-------2020-01-01 19:42:10
fixedRate每隔3-------2020-01-01 19:42:13
fixedRate每隔3-------2020-01-01 19:42:16
fixedDelay每隔6-------2020-01-01 19:42:16
fixedRate每隔3-------2020-01-01 19:42:19
发布了14 篇原创文章 · 获赞 18 · 访问量 2347

猜你喜欢

转载自blog.csdn.net/qq_41144667/article/details/103795004