最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

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

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

Scheduled參數(shù)

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

fixRate和fixDelay

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

fixRate

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

fixDelay

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

initialDelay參數(shù)

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

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

在不知到initialDelay這個(gè)參數(shù)的時(shí)候?yàn)榱俗尦绦騿?dòng)時(shí)立即調(diào)用該函數(shù),我讓這個(gè)定時(shí)類繼承了 InitializingBean 并在重寫的 afterPropertiesSet 方法中手動(dòng)調(diào)用了這個(gè)函數(shù)。。?,F(xiàn)在看起來還真是愚蠢。。。

cron

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

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

"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

六個(gè)部分分別表示秒、分、時(shí)、日、月、周。

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

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

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

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

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

注意點(diǎn)

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

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

相關(guān)文章

  • 詳解在Java中如何創(chuàng)建多線程程序

    詳解在Java中如何創(chuàng)建多線程程序

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著在Java中如何創(chuàng)建多線程程序展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Spring實(shí)現(xiàn)Quartz自動(dòng)配置的方法詳解

    Spring實(shí)現(xiàn)Quartz自動(dòng)配置的方法詳解

    這篇文章主要介紹了Spring實(shí)現(xiàn)Quartz自動(dòng)配置的方法詳解,如果想在應(yīng)用中使用Quartz任務(wù)調(diào)度功能,可以通過Spring Boot實(shí)現(xiàn)Quartz的自動(dòng)配置,以下介紹如何開啟Quartz自動(dòng)配置,以及Quartz自動(dòng)配置的實(shí)現(xiàn)過程,需要的朋友可以參考下
    2023-11-11
  • java中優(yōu)化大量if...else...方法總結(jié)

    java中優(yōu)化大量if...else...方法總結(jié)

    在我們平時(shí)的開發(fā)過程中,經(jīng)??赡軙?huì)出現(xiàn)大量If else的場(chǎng)景,代碼顯的很臃腫,非常不優(yōu)雅,下面這篇文章主要給大家介紹了關(guān)于java中優(yōu)化大量if...else...方法的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Java中常用輸出方式(print() println() printf())

    Java中常用輸出方式(print() println() printf())

    這篇文章主要介紹了Java中常用輸出方式(print() println() printf()),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解

    SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解

    這篇文章主要介紹了SpringCloud中的路由網(wǎng)關(guān)鑒權(quán)熔斷詳解,Hystrix是一個(gè)用于處理分布式系統(tǒng)的延遲和容錯(cuò)的開源庫,在分布式系統(tǒng)里,許多依賴不可避免的會(huì)調(diào)用失敗,比如超時(shí)、異常等,需要的朋友可以參考下
    2024-01-01
  • Java利用三目運(yùn)算符比較三個(gè)數(shù)字的大小

    Java利用三目運(yùn)算符比較三個(gè)數(shù)字的大小

    今天小編就為大家分享一篇關(guān)于Java利用三目運(yùn)算符比較三個(gè)數(shù)字的大小,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java并發(fā)底層實(shí)現(xiàn)原理學(xué)習(xí)心得

    Java并發(fā)底層實(shí)現(xiàn)原理學(xué)習(xí)心得

    本片文章是學(xué)習(xí)Java并發(fā)底層實(shí)現(xiàn)原理的一篇知識(shí)心得,對(duì)大家學(xué)習(xí)這個(gè)方便的知識(shí)很有幫助,一起參考下。
    2018-01-01
  • Java創(chuàng)建List常用幾種方法

    Java創(chuàng)建List常用幾種方法

    本文主要介紹了Java創(chuàng)建List常用幾種方法,主要介紹了9種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 使用Cloud?Studio構(gòu)建SpringSecurity權(quán)限框架(騰訊云?Cloud?Studio?實(shí)戰(zhàn)訓(xùn)練營(yíng))

    使用Cloud?Studio構(gòu)建SpringSecurity權(quán)限框架(騰訊云?Cloud?Studio?實(shí)戰(zhàn)訓(xùn)練

    隨著云計(jì)算技術(shù)的成熟和普及,傳統(tǒng)編程能力和資源以云服務(wù)的形式開放出來,從中間件、數(shù)據(jù)庫等水平能力服務(wù)組件到人臉識(shí)別、鑒權(quán)服務(wù)等基本業(yè)務(wù)服務(wù)組件很容易的在云端獲取,本文介紹使用Cloud?Studio構(gòu)建SpringSecurity權(quán)限框架的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2023-08-08
  • SpringBoot使用AES對(duì)JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法

    SpringBoot使用AES對(duì)JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot使用AES對(duì)JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法,文章通過代碼示例介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

抚远县| 达拉特旗| 潞城市| 马关县| 武川县| 肇庆市| 容城县| 武清区| 吴旗县| 湖州市| 湘乡市| 阿瓦提县| 宁河县| 天水市| 格尔木市| 嘉峪关市| 山阳县| 东方市| 白河县| 揭西县| 德兴市| 津市市| 梁平县| 玉溪市| 阳谷县| 海城市| 延川县| 贡嘎县| 浦县| 嵊泗县| 明溪县| 镇安县| 婺源县| 蓝田县| 渝北区| 溆浦县| 舒城县| 龙江县| 镇安县| 台安县| 台前县|