spring的定時任務和@Scheduled註解裏面的參數 (靜態定時任務 動態定時任務)

 

基於註解實現一個簡單的定時任務(靜態定時任務)

“/”:爲特別單位,表示爲“每”如“0/15”表示每隔15分鐘執行一次,“0”表示爲從“0”分開始, “3/20”
表示每隔20分鐘執行一次,“3”表示從第3分鐘開始執行  
 “?”:表示每月的某一天,或第周的某一天  
 “L”:用於每月,或每週,表示爲每月的最後一天,或每個月的最後星期幾
如“6L”表示“每月的最後一星期五”  
“W”:表示爲最近工作日,如“15W”放在每月(day-of-month)字段上表示爲“到本月15日最近的工日”  
““#”:是用來指定“的”每月第n個工作日,例 在每週(day-of-week)這個字段中內容爲"6#3" or //"FRI#3" 則表示“每月第三個星期五”

 

       
@Component
@Configurable
@EnableScheduling
public class StoreServiceImpl implements StoreService{
      

//Cron表達式範例:
//每隔5秒執行一次:*/5 * * * * ?
//每隔1分鐘執行一次:0 */1 * * * ?
//每天23點執行一次:0 0 23 * * ?
//每天凌晨1點執行一次:0 0 1 * * ?
//每月1號凌晨1點執行一次:0 0 1 1 * ?
//每月最後一天23點執行一次:0 0 23 L * ?
//每週星期天凌晨1點實行一次:0 0 1 ? * L


       @Scheduled(cron = "0 0 0 * * ?")
	   public void changeRecommendSatus() {

           //執行自己的代碼

  }

}


手動開啓和關閉一個定時任務

 

相關類和方法簡介

ThreadPoolTaskScheduler:線程池任務調度類,能夠開啓線程池進行任務調度。

 

ThreadPoolTaskScheduler.schedule() :

方法會創建一個定時計劃ScheduledFuture,需要兩個參數

Runnable(線程接口類) 和CronTrigger(定時任務觸發器)

ScheduledFuture(定時計劃類),中有一個cancel可以停止定時任務。

 

   //實例化一個線程池任務調度類
    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler; 
   
    //接收生成的定時計劃
    private ScheduledFuture<?> future;

    //這裏做一個實現多線程的類,裏面的run方法會被 ScheduledFuture對象定時觸發,時間
      是你填寫的cron表達式
    public class MyRunnable implements Runnable {
		
       public void run() {
           System.out.println("DynamicTask.MyRunnable.run()," + new Date());
              //這裏寫你想要執行的代碼
       }
    } 

  // 定時計劃類提供方法能結束當前的定時任務
   public String stopCron() {
       if (future != null) {
           future.cancel(true);
       }
       System.out.println("DynamicTask.stopCron()");
       return "stopCron";
     }

    //生成一個定時計劃類,傳入的線程會被定時執行
    public String startCron() {
                //cron是你定義的表達式
		if(cron != null) {
			future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger(cron));
		    System.out.println("DynamicTask.startCron()");
		    return "startCron";
		}else {
		    return "faild";
		}
        
	} 

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