第二十六章:SpringBoot使用@Scheduled創(chuàng)建定時(shí)任務(wù)

定時(shí)任務(wù)一般會(huì)存在中大型企業(yè)級(jí)項(xiàng)目中盒让,為了減少服務(wù)器愈犹、數(shù)據(jù)庫的壓力往往會(huì)采用時(shí)間段性的去完成某些業(yè)務(wù)邏輯媳叨。比較常見的就是金融服務(wù)系統(tǒng)推送回調(diào)划提,一般支付系統(tǒng)訂單在沒有收到成功的回調(diào)返回內(nèi)容時(shí)會(huì)持續(xù)性的回調(diào)万牺,這種回調(diào)一般都是定時(shí)任務(wù)來完成的罗珍。還有就是報(bào)表的生成,我們一般會(huì)在客戶訪問量過小的時(shí)候來完成這個(gè)操作脚粟,那往往都是在凌晨覆旱。這時(shí)我們也可以采用定時(shí)任務(wù)來完成邏輯。SpringBoot為我們內(nèi)置了定時(shí)任務(wù)珊楼,我們只需要一個(gè)注解就可以開啟定時(shí)為我們所用了通殃。

免費(fèi)專題文章匯總

恒宇少年在博客整理出來了SpringBoot、ApiBoot厕宗、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】画舌,【SpringCloud基礎(chǔ)教程專題】,【ApiBoot組件使用專題

本章目標(biāo)

基于SpringBoot架構(gòu)完成注解@Scheduled的定時(shí)任務(wù)配置已慢。

構(gòu)建項(xiàng)目

使用idea開發(fā)工具來構(gòu)建SpringBoot項(xiàng)目曲聂,我們預(yù)先導(dǎo)入Web依賴,pom.xml如下圖1所示:

圖1

文章開頭我說到了SpringBoot為我們內(nèi)置了@Scheduled定時(shí)任務(wù)佑惠,下面我們就來配置下這個(gè)注解朋腋,找到入口程序Chapter26Application添加注解@EnableScheduling,如下圖2所示:

圖2

可以看到上圖2內(nèi)我們添加注解后SpringBoot就已經(jīng)認(rèn)定了我們要使用定時(shí)任務(wù)來完成一些業(yè)務(wù)邏輯了膜楷,內(nèi)部會(huì)對(duì)應(yīng)原始配置定時(shí)任務(wù)添加對(duì)應(yīng)的配置文件旭咽。

@Scheduled

@scheduled注解用來配置到方法上來完成對(duì)應(yīng)的定時(shí)任務(wù)的配置,如執(zhí)行時(shí)間赌厅,間隔時(shí)間穷绵,延遲時(shí)間等等,下面我們就來詳細(xì)的看下對(duì)應(yīng)的屬性配置特愿。

我們先來創(chuàng)建一個(gè)測試的定時(shí)任務(wù)實(shí)體仲墨,如下圖3所示:

圖3

上圖3內(nèi)的注解@Compoment用來標(biāo)明這是一個(gè)被Spring管理的Bean,這個(gè)就不用多做講解了。下面我們來配置@Scheduled揍障,來完成每小時(shí)的整10分鐘輸出內(nèi)容目养,如下圖4所示:

圖4

cron屬性

這是一個(gè)時(shí)間表達(dá)式,可以通過簡單的配置就能完成各種時(shí)間的配置毒嫡,我們通過CRON表達(dá)式幾乎可以完成任意的時(shí)間搭配癌蚁,它包含了六或七個(gè)域:

Seconds?: 可出現(xiàn)", - * /"四個(gè)字符,有效范圍為0-59的整數(shù)
Minutes?: 可出現(xiàn)", - * /"四個(gè)字符,有效范圍為0-59的整數(shù)
Hours?: 可出現(xiàn)", - * /"四個(gè)字符匈勋,有效范圍為0-23的整數(shù)
DayofMonth?: 可出現(xiàn)", - * / ? L W C"八個(gè)字符礼旅,有效范圍為0-31的整數(shù)
Month?: 可出現(xiàn)", - * /"四個(gè)字符,有效范圍為1-12的整數(shù)或JAN-DEc
DayofWeek?: 可出現(xiàn)", - * / ? L C #"四個(gè)字符洽洁,有效范圍為1-7的整數(shù)或SUN-SAT兩個(gè)范圍痘系。1表示星期天,2表示星期一饿自, 依次類推
Year?: 可出現(xiàn)", - * /"四個(gè)字符汰翠,有效范圍為1970-2099年

下面簡單舉幾個(gè)例子:

"0 0 12 * * ?" ? ?每天中午十二點(diǎn)觸發(fā)
"0 15 10 ? * *" ? ?每天早上10:15觸發(fā)
"0 15 10 * * ?" ? ?每天早上10:15觸發(fā)
"0 15 10 * * ? *" ? ?每天早上10:15觸發(fā)
"0 15 10 * * ? 2005" ? ?2005年的每天早上10:15觸發(fā)
"0 * 14 * * ?" ? ?每天從下午2點(diǎn)開始到2點(diǎn)59分每分鐘一次觸發(fā)
"0 0/5 14 * * ?" ? ?每天從下午2點(diǎn)開始到2:55分結(jié)束每5分鐘一次觸發(fā)
"0 0/5 14,18 * * ?" ? ?每天的下午2點(diǎn)至2:55和6點(diǎn)至6點(diǎn)55分兩個(gè)時(shí)間段內(nèi)每5分鐘一次觸發(fā)
"0 0-5 14 * * ?" ? ?每天14:00至14:05每分鐘一次觸發(fā)
"0 10,44 14 ? 3 WED" ? ?三月的每周三的14:10和14:44觸發(fā)
"0 15 10 ? * MON-FRI" ? ?每個(gè)周一、周二昭雌、周三复唤、周四、周五的10:15觸發(fā)

fixedRate屬性

該屬性的含義是上一個(gè)調(diào)用開始后再次調(diào)用的延時(shí)(不用等待上一次調(diào)用完成)烛卧,這樣就會(huì)存在重復(fù)執(zhí)行的問題佛纫,所以不是建議使用,但數(shù)據(jù)量如果不大時(shí)在配置的間隔時(shí)間內(nèi)可以執(zhí)行完也是可以使用的总放。配置示例如下圖5所示:

圖5

可以看到上圖5內(nèi)我配置的間隔時(shí)間是1秒呈宇,我在方法內(nèi)使用了線程休眠,我們來測試下間隔輸出的時(shí)間是多少局雄,下面我們來啟動(dòng)項(xiàng)目甥啄,并且查看控制臺(tái)輸出內(nèi)容。

項(xiàng)目成功啟動(dòng)后查看控制臺(tái)內(nèi)容如下圖6所示:

圖6

我們可以看到每一次打印的間隔都是2秒鐘炬搭,也就是我們配置線程休眠的時(shí)間蜈漓,很好的證實(shí)了該方法并沒有等到執(zhí)行完再開始下一次執(zhí)行。

fixedDelay屬性

該屬性的功效與上面的fixedRate則是相反的宫盔,配置了該屬性后會(huì)等到方法執(zhí)行完成后延遲配置的時(shí)間再次執(zhí)行該方法融虽。配置示例如下圖7所示:

圖7

我們重啟下項(xiàng)目后查看控制臺(tái)輸出(因?yàn)榉奖悴榭窗阎芭渲玫淖⒔舛家呀?jīng)注釋掉),輸出內(nèi)容如下圖8所示:

圖8

可以看到上圖8內(nèi)的輸出內(nèi)容灼芭,時(shí)間間隔是4秒鐘衣形,我們在方法內(nèi)僅僅使線程休眠了3秒鐘,配置方法的延遲執(zhí)行時(shí)間則是1秒鐘姿鸿,證明了確實(shí)是在方法執(zhí)行完成后延遲配置時(shí)間后再次執(zhí)行該方法。

initialDelay屬性

該屬性跟上面的fixedDelay倒源、fixedRate有著密切的關(guān)系苛预,為什么這么說呢?該屬性的作用是第一次執(zhí)行延遲時(shí)間笋熬,只是做延遲的設(shè)定热某,并不會(huì)控制其他邏輯,所以要配合fixedDelay或者fixedRate來使用,配置示例圖下圖9所示:

圖9

我們再次重啟項(xiàng)目昔馋,查看控制臺(tái)輸出筹吐,這次我們等待了10秒鐘后才看到了第一次輸出內(nèi)容,如下圖10所示:

圖10

可以看到上圖10內(nèi)紅色部分秘遏,項(xiàng)目成功啟動(dòng)的時(shí)間為23:02:06而第一次輸出的時(shí)間則是23:02:16丘薛,證明了我們配置的延遲時(shí)間生效了。第一次加載完成后之后就是每間隔2秒鐘執(zhí)行一邊該方法邦危。

注意上面所有屬性的配置時(shí)間單位都是毫秒洋侨,可根據(jù)項(xiàng)目中實(shí)際情況進(jìn)行時(shí)間單位換算

總結(jié)

上述內(nèi)容就是本章的所有講解內(nèi)容,本章主要講解了SpringBoot項(xiàng)目內(nèi)的定時(shí)任務(wù)如果配置使用倦蚪,上述的屬性是我們實(shí)際項(xiàng)目中最常用到的希坚,可根據(jù)項(xiàng)目實(shí)際情況進(jìn)行選擇配置。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陵且,一起剝皮案震驚了整個(gè)濱河市裁僧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慕购,老刑警劉巖聊疲,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脓钾,居然都是意外死亡售睹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門可训,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昌妹,“玉大人,你說我怎么就攤上這事握截》裳拢” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵谨胞,是天一觀的道長固歪。 經(jīng)常有香客問我,道長胯努,這世上最難降的妖魔是什么牢裳? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮叶沛,結(jié)果婚禮上蒲讯,老公的妹妹穿的比我還像新娘。我一直安慰自己灰署,他們只是感情好判帮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布局嘁。 她就那樣靜靜地躺著,像睡著了一般晦墙。 火紅的嫁衣襯著肌膚如雪悦昵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天晌畅,我揣著相機(jī)與錄音但指,去河邊找鬼。 笑死踩麦,一個(gè)胖子當(dāng)著我的面吹牛枚赡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谓谦,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贫橙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了反粥?” 一聲冷哼從身側(cè)響起卢肃,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎才顿,沒想到半個(gè)月后莫湘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郑气,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年幅垮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尾组。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忙芒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出讳侨,到底是詐尸還是另有隱情呵萨,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布跨跨,位于F島的核電站潮峦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏勇婴。R本人自食惡果不足惜忱嘹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耕渴。 院中可真熱鬧德谅,春花似錦、人聲如沸萨螺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慰技。三九已至椭盏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吻商,已是汗流浹背掏颊。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艾帐,地道東北人乌叶。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像柒爸,于是被迫代替她去往敵國和親准浴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理捎稚,服務(wù)發(fā)現(xiàn)乐横,斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,074評(píng)論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,803評(píng)論 6 342
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,958評(píng)論 6 13
  • 前言:先放上王海桑的一段詩今野,詩的內(nèi)容描寫的或是友誼或是愛情葡公,心動(dòng)的是最后一句 如果 你來看我,請(qǐng)告訴我吧哪怕現(xiàn)在就...
    底兒的家閱讀 807評(píng)論 0 0