SpringBoot系列:Spring Boot定時(shí)任務(wù)Spring Schedule

Spring Schedule是Spring提供的定時(shí)任務(wù)框架一膨,相較于Quartz缓溅,Schedule更加簡(jiǎn)單易用,在中小型應(yīng)用中,對(duì)于大部分需求,Schedule都可以勝任镇防。

一、Spring Schedule使用演示

在SpringBoot使用Spring Schedule非常簡(jiǎn)單涣狗,因?yàn)镾pringBoot自身的starter中已經(jīng)集成了Schedule谍婉,而不需要我們做更多的處理。

使用@EnableScheduling注解開啟定時(shí)功能屑柔,該注解可以使用在啟動(dòng)類上屡萤,也可以注解于定時(shí)任務(wù)的類上。然后使用@Scheduled注解配合其參數(shù)完成定時(shí)任務(wù)掸宛。

例如我們需要每一秒執(zhí)行一次的任務(wù)死陆, 寫成@Scheduled(fixedRate = 1000)即可。

@EnableScheduling
@Component
public class Task {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 1000)
    public void taskOne(){
        System.out.println("現(xiàn)在時(shí)間:" + dateFormat.format(new Date()));
    }

}

啟動(dòng)程序唧瘾,該定時(shí)就可以間隔一秒持續(xù)執(zhí)行了措译。

使用Spring Schedule就是這么簡(jiǎn)單,如果有更多其他的需求饰序,配合@Scheduled的其他參數(shù)领虹,基本也可以實(shí)現(xiàn)。

一求豫、@Scheduled參數(shù)詳解

cron

支持傳入cron表達(dá)式:[秒] [分] [小時(shí)] [日] [月] [周] [年]塌衰,[年]不是必須的域,可以省略[年]蝠嘉,則一共6個(gè)域最疆。

位置 說(shuō)明 必填 允許填寫的值 允許的通配符
1 0-59 - * /
2 0-59 - * /
3 時(shí) 0-23 - * /
4 1-31 - * ? / L W
5 1-12 or JAN-DEC - * /
6 1-7 or SUN-SAT - * ? / L #
7 1970-2099 - * /
  • * 表示所有值。 例如:在分的字段上設(shè)置 *,表示每一分鐘都會(huì)觸發(fā)蚤告。
  • ? 表示不指定值努酸。使用的場(chǎng)景為不需要關(guān)心當(dāng)前設(shè)置這個(gè)字段的值。例如:要在每月的10號(hào)觸發(fā)一個(gè)操作杜恰,但不關(guān)心是周幾获诈,所以需要周位置的那個(gè)字段設(shè)置為”?” 具體設(shè)置為 0 0 0 10 * ?
  • - 表示區(qū)間。例如 在小時(shí)上設(shè)置 “10-12”,表示 10,11,12點(diǎn)都會(huì)觸發(fā)心褐。
  • , 表示指定多個(gè)值舔涎,例如在周字段上設(shè)置 “MON,WED,FRI” 表示周一,周三和周五觸發(fā)/ 用于遞增觸發(fā)檬寂。如在秒上面設(shè)置”5/15” 表示從5秒開始终抽,每增15秒觸發(fā)(5,20,35,50)。 在月字段上設(shè)置’1/3’所示每月1號(hào)開始桶至,每隔三天觸發(fā)一次。
  • L 表示最后的意思匾旭。在日字段設(shè)置上镣屹,表示當(dāng)月的最后一天(依據(jù)當(dāng)前月份,如果是二月還會(huì)依據(jù)是否是潤(rùn)年[leap]), 在周字段上表示星期六价涝,相當(dāng)于”7”或”SAT”女蜈。如果在”L”前加上數(shù)字,則表示該數(shù)據(jù)的最后一個(gè)。例如在周字段上設(shè)置”6L”這樣的格式,則表示“本月最后一個(gè)星期五”
  • W 表示離指定日期的最近那個(gè)工作日(周一至周五). 例如在日字段上置”15W”伪窖,表示離每月15號(hào)最近的那個(gè)工作日觸發(fā)逸寓。如果15號(hào)正好是周六,則找最近的周五(14號(hào))觸發(fā), 如果15號(hào)是周未覆山,則找最近的下周一(16號(hào))觸發(fā).如果15號(hào)正好在工作日(周一至周五)竹伸,則就在該天觸發(fā)。如果指定格式為 “1W”,它則表示每月1號(hào)往后最近的工作日觸發(fā)簇宽。如果1號(hào)正是周六勋篓,則將在3號(hào)下周一觸發(fā)。(注魏割,”W”前只能設(shè)置具體的數(shù)字,不允許區(qū)間”-“)譬嚣。
  • # 序號(hào)(表示每月的第幾個(gè)周幾),例如在周字段上設(shè)置”6#3”表示在每月的第三個(gè)周六.注意如果指定”#5”,正好第五周沒(méi)有周六钞它,則不會(huì)觸發(fā)該配置(用在母親節(jié)和父親節(jié)再合適不過(guò)了) 拜银;小提示:’L’和 ‘W’可以一組合使用。如果在日字段上設(shè)置”LW”,則表示在本月的最后一個(gè)工作日觸發(fā)遭垛;周字段的設(shè)置尼桶,若使用英文字母是不區(qū)分大小寫的,即MON與mon相同耻卡。
示例
  • 每隔5秒執(zhí)行一次:*/5 * * * * ?
  • 每隔1分鐘執(zhí)行一次:0 */1 * * * ?
  • 每天23點(diǎn)執(zhí)行一次:0 0 23 * * ?
  • 每天凌晨1點(diǎn)執(zhí)行一次:0 0 1 * * ?
  • 每月1號(hào)凌晨1點(diǎn)執(zhí)行一次:0 0 1 1 * ?
  • 每月最后一天23點(diǎn)執(zhí)行一次:0 0 23 L * ?
  • 每周星期天凌晨1點(diǎn)實(shí)行一次:0 0 1 ? * L
  • 在26分疯汁、29分、33分執(zhí)行一次:0 26,29,33 * * * ?
  • 每天的0點(diǎn)卵酪、13點(diǎn)幌蚊、18點(diǎn)、21點(diǎn)都執(zhí)行一次:0 0 0,13,18,21 * * ?

zone

表示時(shí)區(qū)溃卡,接收一個(gè)java.util.TimeZone#ID溢豆。cron表達(dá)式會(huì)基于該時(shí)區(qū)解析。默認(rèn)是一個(gè)空字符串瘸羡,即取服務(wù)器所在地的時(shí)區(qū)漩仙。

fixedDelay

上一次執(zhí)行完畢時(shí)間點(diǎn)之后多長(zhǎng)時(shí)間再執(zhí)行。

fixedDelayString

與fixedDelay類似犹赖,傳入字符串队他,也可支持傳入${}占位符讀取配置文件。

    @Scheduled(fixedDelayString = "${task.two.fixedDelay}")
    void taskTwo() {
       System.out.println("現(xiàn)在時(shí)間:" + dateFormat.format(new Date()));
    }

fixedRate

上一次開始執(zhí)行時(shí)間點(diǎn)之后多長(zhǎng)時(shí)間再執(zhí)行峻村。

fixedRate與fixedDelay的區(qū)別就是:fixedDelay是在上一個(gè)任務(wù)結(jié)束后才開始進(jìn)行間隔計(jì)時(shí)麸折,也就是說(shuō)兩次任務(wù)之間的時(shí)間差等于間隔+任務(wù)執(zhí)行耗時(shí),而fixedRate是在上一個(gè)任務(wù)一開始就已經(jīng)開始進(jìn)行間隔計(jì)時(shí)了粘昨,可以視為固定等于設(shè)置的間隔時(shí)間垢啼。

fixedRateString

與fixedRate一樣窜锯,傳入字符串,支持占位符讀取配置文件芭析。

initialDelay

第一次任務(wù)延遲時(shí)間锚扎。

initialDelayString

同initialDelay,支持占位符讀取配置信息馁启。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驾孔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子进统,更是在濱河造成了極大的恐慌助币,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螟碎,死亡現(xiàn)場(chǎng)離奇詭異眉菱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)掉分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門俭缓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人酥郭,你說(shuō)我怎么就攤上這事华坦。” “怎么了不从?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵惜姐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我椿息,道長(zhǎng)歹袁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任寝优,我火速辦了婚禮条舔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乏矾。我一直安慰自己孟抗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布钻心。 她就那樣靜靜地躺著凄硼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捷沸。 梳的紋絲不亂的頭發(fā)上帆喇,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音亿胸,去河邊找鬼坯钦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侈玄,可吹牛的內(nèi)容都是我干的婉刀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼序仙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼突颊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起潘悼,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤律秃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后治唤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棒动,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年宾添,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了船惨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缕陕,死狀恐怖粱锐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扛邑,我是刑警寧澤怜浅,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蔬崩,受9級(jí)特大地震影響恶座,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舱殿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一奥裸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沪袭,春花似錦湾宙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至死宣,卻和暖如春伟恶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毅该。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工博秫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潦牛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓挡育,卻偏偏與公主長(zhǎng)得像巴碗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子即寒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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