SpringBoot @Scheduled註解(cron、fixedRate、fixedDelay、initialDelay)各個參數區別

  1. fixedDelay控制方法執行的間隔時間(毫秒),是以上一次方法執行完開始算起,如上一次方法執行阻塞住了,那麼直到上一次執行完,並間隔給定的時間後,執行下一次。上個過程結束後,等待300ms,執行下個過程
  2. fixedRate是按照一定的速率執行,是從上一次方法執行開始的時間算起,如果上一次方法阻塞住了,下一次也是不會執行,但是在阻塞這段時間內累計應該執行的次數,當不再阻塞時,一下子把這些全部執行掉,而後再按照固定速率繼續執行。以固定300ms的頻率執行某個過程,不管前面的過程是否還在進行,一般用於可以**獨立、並行**的執行過程
  3. cron表達式可以定製化執行任務,但是執行的方式是與fixedDelay相近的,也是會按照上一次方法結束時間開始算起。
  4. initialDelay 如: @Scheduled(initialDelay = 10000,fixedRate = 15000,這個定時器就是在上一個的基礎上加了一個initialDelay = 10000 意思就是在容器啓動後,延遲10秒後再執行一次定時器,以後每15秒再執行一次該定時器。

參考文章

https://www.baeldung.com/spring-scheduled-tasks

package com.demo.task;
 
import com.demo.util.DateUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.util.Date;
 
@Component
public class Test_task {
 
	//@Component 註冊爲spring組件
 
	/*
	1、fixedDelay控制方法執行的間隔時間,是以上一次方法執行完開始算起,如上一次方法執行阻塞住了,那麼直到上一次執行完,
		並間隔給定的時間後,執行下一次。
	2、fixedRate是按照一定的速率執行,是從上一次方法執行開始的時間算起,如果上一次方法阻塞住了,下一次也是不會執行,
		但是在阻塞這段時間內累計應該執行的次數,當不再阻塞時,一下子把這些全部執行掉,而後再按照固定速率繼續執行。
	3、cron表達式可以定製化執行任務,但是執行的方式是與fixedDelay相近的,也是會按照上一次方法結束時間開始算起。
	4、initialDelay 。如: @Scheduled(initialDelay = 10000,fixedRate = 15000,這個定時器就是在上一個的基礎上加了一個
		initialDelay = 10000 意思就是在容器啓動後,延遲10秒後再執行一次定時器,以後每15秒再執行一次該定時器。
	*/
 
 
	@Scheduled(cron="0 */1 * * * ?")
	public void Test_task(){
		//System.out.println("定時1分鐘執行一次");
	}
 
	//*/5 * * * * ?  5秒執行一次
	@Scheduled(cron = "*/5 * * * * ?")
	public  void time(){
		//System.out.println("每5秒執行一次:"+ DateUtils.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss"));
	}
 
	//fixedRate 定義一個按一定頻率執行的定時任務
	@Scheduled(fixedRate = 5000)
	public  void fixedRate(){
		System.out.println("每5毫秒執行fixedRate一次:"+ DateUtils.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss"));
	}
 
	//fixedDelay 定義一個按一定頻率執行的定時任務,與上面不同的是,改屬性可以配合initialDelay, 定義該任務延遲執行時間。
	@Scheduled(fixedDelay = 5000)
	public  void fixedDelay(){
		System.out.println("每5毫秒執行fixedDelay一次:"+ DateUtils.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss"));
	}
 
	@Scheduled(initialDelay = 1000,fixedRate = 5000)
	public void initialDelay(){
		System.out.println("華麗的分割符----"+DateUtils.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss"));
	}
 
 
 
 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章