SpringBoot2定时任务——Scheduled注解

SpringBoot2定时任务的使用和参数说明。

1. 启动类启用定时任务:
在启动类上加注解:@EnableScheduling即可实现。
@SpringBootApplication 
@EnableScheduling 
public class Application { 

    public static void main(String[] args) { 
        SpringApplication.run(Application.class, args); 
    } 
} 
2. 创建定时任务实现类:

定时任务1:
@Component 
public class SchedulerTask { 
    private int count=0; 

    @Scheduled(cron="*/6 * * * * ?") 
    private void process(){ 
        System.out.println("运行次数:"+(++count)); 
    } 
} 
定时任务2:
@Component 
public class Scheduler2Task { 

    private static final SimpleDateFormat dateFormat = new  SimpleDateFormat("HH:mm:ss"); 

    @Scheduled(fixedRate = 6000) 
    public void reportCurrentTime() { 
        System.out.println("现在时间:" + dateFormat.format(new Date())); 
    } 

} 
结果如下:
运行次数:1
现在时间:19:20:18
运行次数:2
现在时间:19:20:24
运行次数:3
现在时间:19:20:30
运行次数:4
现在时间:19:20:36

3. 参数说明:

@Scheduled接受两种定时的设置:

一种是Rate/Delay表达式(毫秒值):
  @Scheduled(fixedRate = 6000):上一次开始执行时间点后每隔6秒执行一次。
  @Scheduled(fixedDelay = 6000):上一次执行完毕时间点之后6秒再执行。
  @Scheduled(initialDelay=1000, fixedRate=6000):第一次延迟1秒后执行,之后按fixedRate的规则每6秒执行一次。


一种是cornexpression:

完整字段:[秒] [分] [小时] [日] [月] [周] [年]
  字段      允许值            允许特殊字符 
  秒       0-59              , - * / 
  分       0-59              , - * / 
  小时      0-23              , - * / 
  日       1-31              , - * ? / L W C 
  月       1-12或JAN-DEC          , - * / 
  周       1-7或SUN-SAT          , - *  ? / L C # 
  年       留空或1970-2099         , - * / 

注:
* 表示所有值,在分钟里表示每一分钟触发。在小时,日期,月份等里面表示每一小时,每一日,每一月。
?表示不指定值。表示不关心当前位置设置的值。 比如不关心是周几,则周的位置填写?。  主要是由于日期跟周是有重复的所以两者必须有一者设置为?
- 表示区间。小时设置为10-12表示10,11,12点均会触发。
,表示多个值。 小时设置成10,12表示10点和12点会触发。
/ 表示递增触发。 5/15表示从第5秒开始,每隔15秒触发。
L 表示最后的意思。 日上表示最后一天。星期上表示星期六或7。 L前加数据,表示该数据的最后一个。星期上设置6L表示最后一个星期五。  6表示星期五
W 表示离指定日期最近的工作日触发。15W离该月15号最近的工作日触发。
# 表示每月的第几个周几。 6#3表示该月的第三个周五。

标签: SpringBoot


评论: