欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Spring Boot 定時任務(wù)的實現(xiàn)方法

 更新時間:2017年05月21日 17:55:02   投稿:mrr  
最近在用SpringBoot寫一個關(guān)于定時項目的時候遇到一個問題,下面小編把如何處理定時任務(wù)的解決思路分享給大家 ,需要的朋友參考下

最近在用SpringBoot寫一個關(guān)于定時項目的時候遇到一個問題,就是客戶端訪問服務(wù)器的結(jié)果實際上是每個一段時間發(fā)生一次變化,并且在服務(wù)器在每天的某個固定的時間點都要觸發(fā)一次事件。

我們當(dāng)然可以在遇到每一個請求時都重新計算結(jié)果,但是為了提高效率,我們顯然可以讓服務(wù)器每隔一段時間計算一次結(jié)果,并且把這個結(jié)果進(jìn)行保存,對在下一個時間段內(nèi)的每個請求都直接返回計算后的結(jié)果。這樣就能較好的提高了服務(wù)器的性能。

那么問題就在于如何處理定時任務(wù)。其實SpringBoot早就提供了非常方便的接口,但是網(wǎng)上的介紹還是有點亂的,我就記錄下具體操作的注意點方便以后查找。

創(chuàng)建定時服務(wù)

一般來說定時服務(wù)會寫在一個Component里,方便管理。對于定時任務(wù),我們其實只要在需要定時執(zhí)行的函數(shù)前加上 @Scheduled 注解,比如下面這樣:

@Component
public class ScheduledTask{
  @Scheduled(fixedRate = 5000)
  public void scheduledTask(){
    //do sth...
  }
}

與此同時,我們還要在項目的啟動文件里配置上 @EnableScheduling 注解,告訴項目我們是支持定時任務(wù)的:

@SpringBootApplication
@EnableScheduling
public class LotteryApplication{
 public static void main(String[] args){
 SpringApplication.run(LotteryApplication.class, args);
 }
}

這樣我們的函數(shù)就能定時執(zhí)行了。

Scheduled參數(shù)

Scheduled主要支持 fixRate , fixDelay , cron , initialDelay 這些參數(shù),下面做簡要說明。

fixRate和fixDelay

fixRate和fixDelay參數(shù)都指定了函數(shù)每隔某個毫秒數(shù)執(zhí)行一次,但是他們之間也有細(xì)小的差別。

fixRate

fixRate的計時是相對于系統(tǒng)時間的,也就是一定相隔會固定時間執(zhí)行。

fixDelay

fixDelay的計時是相對于上一次調(diào)用的時間的,因此他受其他程序調(diào)用的影響,如果該函數(shù)在其他地方被手動調(diào)用,那么這個計時器就會重新計時。

initialDelay參數(shù)

initialDelay參數(shù)是個額外參數(shù),比較簡單,就是指定從項目開始運行到該函數(shù)首次被調(diào)用的執(zhí)行時間,以毫秒計。

如果不指定這個參數(shù),這個值就是-1,也就是程序開始時不執(zhí)行。

在不知到initialDelay這個參數(shù)的時候為了讓程序啟動時立即調(diào)用該函數(shù),我讓這個定時類繼承了 InitializingBean 并在重寫的 afterPropertiesSet 方法中手動調(diào)用了這個函數(shù)。?!,F(xiàn)在看起來還真是愚蠢。。。

cron

這個Cron是最復(fù)雜也是高度自定義化的定時工具,在Linux系統(tǒng)里也有類似的crontab命令。他其實是更加細(xì)致的定義了定時任務(wù),以一個字符串的形式進(jìn)行表示。

在SpringBoot中,一個cron字符串是由六個部分以空格組成的字符串,文檔中的例子是這樣的:

"0 0 * * * *" = the top of every hour of every day.
"*/10 * * * * *" = every ten seconds.
"0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
"0 0 6,19 * * *" = 6:00 AM and 7:00 PM every day.
"0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day.
"0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
"0 0 0 25 12 ?" = every Christmas Day at midnight

六個部分分別表示秒、分、時、日、月、周。

他支持'-‘表示范圍,'*'表示通配,'/‘表示在左邊的時間匹配后間隔右邊的時間,'?'一般表示周的通配。

具體的使用方法還要參考相關(guān)文檔。

網(wǎng)上有很多類似 Cron表達(dá)式測試工具 這樣的測試工具,方便我們測試自己寫的Cron表達(dá)式。

下面一個例子表示每隔五分鐘執(zhí)行一次:

@Scheduled(cron = "0 0/5 * * * ?")
public void fiveMinutes(){
  //do sth.
}

注意點

在實際使用Scheduled注解時,我們一定要指定且僅僅指定fixRate、fixDelay、cron當(dāng)中的一個,否則肯定會導(dǎo)致錯誤。當(dāng)然,我們可以任意指定initialDelay參數(shù)。

以上所述是小編給大家介紹的Spring Boot 定時任務(wù)的實現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

  • java實現(xiàn)建造者模式(Builder Pattern)

    java實現(xiàn)建造者模式(Builder Pattern)

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)建造者模式Builder Pattern,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 淺談spring方法級參數(shù)校驗(@Validated)

    淺談spring方法級參數(shù)校驗(@Validated)

    這篇文章主要介紹了淺談spring方法級參數(shù)校驗(@Validated),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java中數(shù)組list map三者之間的互轉(zhuǎn)介紹

    java中數(shù)組list map三者之間的互轉(zhuǎn)介紹

    java中 數(shù)組 list map之間的互轉(zhuǎn)一張圖清晰呈現(xiàn)并附有代碼,不懂的朋友可以參考下
    2013-10-10
  • java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹

    java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹

    這篇文章主要介紹了 java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • springBoot  創(chuàng)建定時任務(wù)過程詳解

    springBoot 創(chuàng)建定時任務(wù)過程詳解

    這篇文章主要介紹了springBoot 創(chuàng)建定時任務(wù)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 詳解Spring系列之@ComponentScan批量注冊bean

    詳解Spring系列之@ComponentScan批量注冊bean

    本文介紹各種@ComponentScan批量掃描注冊bean的基本使用以及進(jìn)階用法和@Componet及其衍生注解使用,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02
  • java實現(xiàn)的順時針/逆時針打印矩陣操作示例

    java實現(xiàn)的順時針/逆時針打印矩陣操作示例

    這篇文章主要介紹了java實現(xiàn)的順時針/逆時針打印矩陣操作,涉及java基于數(shù)組的矩陣存儲、遍歷、打印輸出等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • SpringBoot注解@CrossOrigin使用詳解

    SpringBoot注解@CrossOrigin使用詳解

    這篇文章主要介紹了SpringBoot注解@CrossOrigin使用詳解,@CrossOrigin是用來處理跨域請求的注解
    跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript施加的安全限制,需要的朋友可以參考下
    2023-12-12
  • MyBatis學(xué)習(xí)教程(五)-實現(xiàn)關(guān)聯(lián)表查詢方法詳解

    MyBatis學(xué)習(xí)教程(五)-實現(xiàn)關(guān)聯(lián)表查詢方法詳解

    本文給大家介紹mybatis關(guān)聯(lián)查詢,包括一對一關(guān)聯(lián)查詢,一對多關(guān)聯(lián)查詢,代碼簡單易懂,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • 最新評論