在Spring Boot項目中使用@Scheduled註解實現定時任務

在Spring Boot項目中使用@Scheduled註解實現定時任務

在java開發中定時任務的實現有多種方式,jdk有自己的定時任務實現方式,很多框架也有定時任務的實現方式。這裡,我介紹一種很簡單的實現方式,在Spring Boot項目中使用兩個註解即可實現。

在spring boot的啟動類上面添加 @EnableScheduling 註解

在Spring Boot項目中使用@Scheduled註解實現定時任務

新創建一個類,用來實現定時任務,這個類要註冊為Bean才行,所以要加上 @Component 、@Repository 、 @ Controller 、@Service 、@Configration其中的一個註解。然後再裡面的方法中加上 @Scheduled 註解。

在Spring Boot項目中使用@Scheduled註解實現定時任務

然後為Scheduled註解加上屬性,啟動項目,就可以了。下面介紹Scheduled屬性的用法。

fixedRate

fixedRate表示上一個執行開始後再一次執行的時間,但是必須要等上一次執行完成後才能執行。如果上一次執行完成了,還沒到下一次執行的時間 ,就會等到下一次執行的時間到了才會執行,如果下一次的執行時間到了,上一次還沒執行完,那麼就會等到 上一次執行完成才會執行下一次。=後面的值 1000 為1秒。

@Scheduled(fixedRate = 1000)
public void fixedRate() throws Exception {
 System.out.println("fixedRate開始執行時間:" + new Date(System.currentTimeMillis()));
 //休眠8秒
 Thread.sleep(1000 * 8);
 System.out.println("fixedRate執行結束時間:" + new Date(System.currentTimeMillis()));
}

我們啟動項目看看這個定時任務的執行情況,可以看到開始和結束時間之間間隔了8秒,然後馬上執行了下一次。

在Spring Boot項目中使用@Scheduled註解實現定時任務

我們把改成每2秒執行一次,休眠一秒,再來看看效果,可以看到開始執行的時間間隔了2秒。

@Scheduled(fixedRate = 1000 * 2)
public void fixedRate() throws Exception {
 System.out.println("fixedRate開始執行時間:" + new Date(System.currentTimeMillis()));
 //休眠8秒
 Thread.sleep(1000);
 System.out.println("fixedRate執行結束時間:" + new Date(System.currentTimeMillis()));
}
在Spring Boot項目中使用@Scheduled註解實現定時任務

fixedDelay

fixedDelay表示上一次執行結束後再一次執行的時間,啟動項目,可以看到上一次執行結束後還等了1秒才執行下一次。

@Scheduled(fixedDelay = 1000)
public void fixedDelay() throws Exception {
 System.out.println("fixedDelay開始執行時間:" + new Date(System.currentTimeMillis()));
 //休眠兩秒
 Thread.sleep(1000 * 2);
 System.out.println("fixedDelay執行結束時間:" + new Date(System.currentTimeMillis()));
}
在Spring Boot項目中使用@Scheduled註解實現定時任務

initialDelay

initialDelay表示項目啟動後延遲多久執行定時任務,所以他要配合fixedRate或fixedDelay一起使用。

@Scheduled(initialDelay = 1000*3, fixedDelay = 1000)
public void initialDelay() throws Exception {
 System.out.println("initialDelay開始執行時間:" + new Date(System.currentTimeMillis()));
}

啟動項目,可以看到項目啟動完成後,等了3秒才開始執行的定時任務。

在Spring Boot項目中使用@Scheduled註解實現定時任務

ceon

cron是一種表達式,具體的寫法規格有興趣的可以去學習一下,不懂也不影響使用,直接按照示例就可以類推,寫出自己想要的,也可以直接使用在線生成。

在Spring Boot項目中使用@Scheduled註解實現定時任務

下面寫幾個示例:

*/3 * * * * ? 每隔3秒執行一次

0 */1 * * * ? 每隔1分鐘執行一次

0 0 3-10 * * ? 每天3-10點整點觸發

0 0/3 * * * ? 每三分鐘觸發一次

0 0-3 14 * * ? 在每天下午2點到下午2:03期間的每1分鐘觸發

0 0/5 14 * * ? 在每天下午2點到下午2:55期間的每5分鐘觸發

0 0 10,14,17 * * ? 每天上午10點,下午2點,5點

cron大致瞭解後,來看看實現效果,我寫的是每 3秒執行一次

@Scheduled(cron = "*/3 * * * * ?")
public void cron() {
 System.out.println("cron開始執行時間:" + new Date(System.currentTimeMillis()));
}

啟動項目後,可以看到每次的執行時間間隔了3秒

在Spring Boot項目中使用@Scheduled註解實現定時任務

spring boot 用@Scheduled註解實現定時任務就介紹到這裡。

項目源碼地址: https://github.com/straw-mao/springbootdemo


分享到:


相關文章: