在Spring Boot項(xiàng)目中使用@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù)

在java開發(fā)中定時(shí)任務(wù)的實(shí)現(xiàn)有多種方式嗅榕,jdk有自己的定時(shí)任務(wù)實(shí)現(xiàn)方式充坑,很多框架也有定時(shí)任務(wù)的實(shí)現(xiàn)方式拆融。這里,我介紹一種很簡(jiǎn)單的實(shí)現(xiàn)方式唁情,在Spring Boot項(xiàng)目中使用兩個(gè)注解即可實(shí)現(xiàn)疑苔。

在spring boot的啟動(dòng)類上面添加 @EnableScheduling 注解

image

新創(chuàng)建一個(gè)類,用來實(shí)現(xiàn)定時(shí)任務(wù)甸鸟,這個(gè)類要注冊(cè)為Bean才行惦费,所以要加上 @Component 、@Repository 哀墓、 @ Controller 趁餐、@Service 喷兼、@Configration其中的一個(gè)注解篮绰。然后再里面的方法中加上 @Scheduled 注解。

image

然后為Scheduled注解加上屬性季惯,啟動(dòng)項(xiàng)目吠各,就可以了。下面介紹Scheduled屬性的用法勉抓。

fixedRate

fixedRate表示上一個(gè)執(zhí)行開始后再一次執(zhí)行的時(shí)間贾漏,但是必須要等上一次執(zhí)行完成后才能執(zhí)行。如果上一次執(zhí)行完成了藕筋,還沒到下一次執(zhí)行的時(shí)間 纵散,就會(huì)等到下一次執(zhí)行的時(shí)間到了才會(huì)執(zhí)行,如果下一次的執(zhí)行時(shí)間到了隐圾,上一次還沒執(zhí)行完伍掀,那么就會(huì)等到 上一次執(zhí)行完成才會(huì)執(zhí)行下一次。=后面的值 1000 為1秒暇藏。

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

我們啟動(dòng)項(xiàng)目看看這個(gè)定時(shí)任務(wù)的執(zhí)行情況蜜笤,可以看到開始和結(jié)束時(shí)間之間間隔了8秒,然后馬上執(zhí)行了下一次盐碱。

image

我們把改成每2秒執(zhí)行一次把兔,休眠一秒沪伙,再來看看效果,可以看到開始執(zhí)行的時(shí)間間隔了2秒县好。

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

image

fixedDelay

fixedDelay表示上一次執(zhí)行結(jié)束后再一次執(zhí)行的時(shí)間围橡,啟動(dòng)項(xiàng)目,可以看到上一次執(zhí)行結(jié)束后還等了1秒才執(zhí)行下一次缕贡。

@Scheduled(fixedDelay = 1000)
public void fixedDelay() throws Exception {
 System.out.println("fixedDelay開始執(zhí)行時(shí)間:" + new Date(System.currentTimeMillis()));
 //休眠兩秒
 Thread.sleep(1000 * 2);
 System.out.println("fixedDelay執(zhí)行結(jié)束時(shí)間:" + new Date(System.currentTimeMillis()));
}

image

initialDelay

initialDelay表示項(xiàng)目啟動(dòng)后延遲多久執(zhí)行定時(shí)任務(wù)某饰,所以他要配合fixedRate或fixedDelay一起使用。

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

啟動(dòng)項(xiàng)目善绎,可以看到項(xiàng)目啟動(dòng)完成后黔漂,等了3秒才開始執(zhí)行的定時(shí)任務(wù)。

image

ceon

cron是一種表達(dá)式禀酱,具體的寫法規(guī)格有興趣的可以去學(xué)習(xí)一下炬守,不懂也不影響使用,直接按照示例就可以類推剂跟,寫出自己想要的减途,也可以直接使用在線生成。

image

下面寫幾個(gè)示例:

*/3 * * * * ? 每隔3秒執(zhí)行一次

0 */1 * * * ? 每隔1分鐘執(zhí)行一次

0 0 3-10 * * ? 每天3-10點(diǎn)整點(diǎn)觸發(fā)

0 0/3 * * * ? 每三分鐘觸發(fā)一次

0 0-3 14 * * ? 在每天下午2點(diǎn)到下午2:03期間的每1分鐘觸發(fā)

0 0/5 14 * * ? 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā)

0 0 10,14,17 * * ? 每天上午10點(diǎn)曹洽,下午2點(diǎn)鳍置,5點(diǎn)

cron大致了解后,來看看實(shí)現(xiàn)效果送淆,我寫的是每 3秒執(zhí)行一次

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

啟動(dòng)項(xiàng)目后税产,可以看到每次的執(zhí)行時(shí)間間隔了3秒

image

spring boot 用@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù)就介紹到這里。

項(xiàng)目源碼地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偷崩,一起剝皮案震驚了整個(gè)濱河市辟拷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阐斜,老刑警劉巖衫冻,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谒出,居然都是意外死亡隅俘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門笤喳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來为居,“玉大人,你說我怎么就攤上這事莉测⊙罩瑁” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵捣卤,是天一觀的道長(zhǎng)忍抽。 經(jīng)常有香客問我八孝,道長(zhǎng),這世上最難降的妖魔是什么鸠项? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任干跛,我火速辦了婚禮,結(jié)果婚禮上祟绊,老公的妹妹穿的比我還像新娘楼入。我一直安慰自己,他們只是感情好牧抽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布嘉熊。 她就那樣靜靜地躺著,像睡著了一般扬舒。 火紅的嫁衣襯著肌膚如雪阐肤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天讲坎,我揣著相機(jī)與錄音孕惜,去河邊找鬼。 笑死晨炕,一個(gè)胖子當(dāng)著我的面吹牛衫画,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓮栗,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼削罩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了遵馆?” 一聲冷哼從身側(cè)響起鲸郊,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤丰榴,失蹤者是張志新(化名)和其女友劉穎货邓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體四濒,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡换况,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盗蟆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戈二。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖喳资,靈堂內(nèi)的尸體忽然破棺而出觉吭,到底是詐尸還是另有隱情,我是刑警寧澤仆邓,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布鲜滩,位于F島的核電站伴鳖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏徙硅。R本人自食惡果不足惜榜聂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗓蘑。 院中可真熱鬧须肆,春花似錦、人聲如沸桩皿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泄隔。三九已至瘤礁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梅尤,已是汗流浹背柜思。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巷燥,地道東北人赡盘。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缰揪,于是被迫代替她去往敵國(guó)和親陨享。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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