Spring @Scheduled定时任务的fixedRate,fixedDelay,cron的作用和不同

时间: 2023-07-10 admin IT培训

Spring @Scheduled定时任务的fixedRate,fixedDelay,cron的作用和不同

Spring @Scheduled定时任务的fixedRate,fixedDelay,cron的作用和不同

一.   三种定时类型。

1.cron  --@Scheduled(cron="0/5 * * * *?")

   当时间达到设置的时间会触发事件。上面那个例子会每5秒执行一次。

  • 2018/1/4 14:27:30
  • 2018/1/4 14:27:35
  • 2018/1/4 14:27:40
  • 2018/1/4 14:27:45
  • 2018/1/4 14:27:50
2.fixedRate --@Scheduled(fixedRate=2000)  每两秒执行一次时间。 3.fixedDelay --@Scheduled(fixedDelay=2000)  每次任务执行完之后的2s后继续执行

看字面意思容易理解,但是任务执行长度超过周期会怎样呢?

不多说,直接上图:


import java.text.DateFormat;  
import java.text.SimpleDateFormat;  
import java.util.Date;  import org.springframework.scheduling.annotation.Scheduled;  
import org.springframework.stereotype.Component;  @Component  
public class MyProcessor{  DateFormat sdf = new SimpleDateFormat("HH:mm:ss");  int[] delays = new int[]{8,3,6,2,2};  int index = 0;  @Scheduled(cron = "0/5 * * * * ?}")  public void process() {  try {  if(index > delays.length - 1){  if(index == delays.length){  System.out.println("---------- test end at " + sdf.format(new Date()) + " ---------");  }  index ++;  return;  }else{  System.out.println(index + ":start run at" + sdf.format(new Date()));  }  Thread.sleep(delays[index] * 1000);  System.out.println(index + ":end run at " + sdf.format(new Date()));  index ++;   } catch (InterruptedException e) {  e.printStackTrace();  }  }  
}