SpringBoot + Schedule 實(shí)現(xiàn)定時任務(wù)

    今天,按照設(shè)計稿需要有一個這樣的需求:

每天早上 8 點(diǎn)鐘,將前一天的 8 點(diǎn)至今天 7 點(diǎn) 59 分的所有內(nèi)容更新狀態(tài)。這里就涉及到了一個問題:如何在每天早上 8 點(diǎn)鐘定時執(zhí)行一個任務(wù)呢?
這里,我們使用 SpringBoot 默認(rèn)支持的 Schedule 來完成。

1. 開啟支持,在啟動類上面加個注解:

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

2. 定時的兩種類型:

a. 間隔執(zhí)行

@Scheduled(fixedRate = 5000) : 表示 每隔 5000 毫秒執(zhí)行一次
public void reportCurrentTime() {
    System.out.println("每隔五秒鐘執(zhí)行一次: " + dateFormat.format(new Date()));
}
 結(jié)果輸出如下:
image.png

b. 定時執(zhí)行

@Scheduled(cron = "0 30 11 ? * *")  : 表示 在指定時間執(zhí)行
public void fixTimeExecution() {
    System.out.println("在指定時間 " + dateFormat.format(new Date()) + "執(zhí)行");
}
結(jié)果輸出如下:
image.png

3. 參數(shù)解釋

* 第一位,表示秒,取值 0-59
* 第二位,表示分,取值 0-59
* 第三位,表示小時,取值 0-23
* 第四位,日期,取值 1-31
* 第五位,月份,取值 1-12
* 第六位,星期幾,取值 1-7
* 第七位,年份,可以留空,取值 1970-2099

(*) 星號:可以理解為“每”的意思,每秒、沒分
(?) 問好:只能出現(xiàn)在日期和星期這兩個位置,表示這個位置的值不確定
(-) 表達(dá)一個范圍,如在小時字段中使用 10-12 ,表示從10點(diǎn)到12點(diǎn)
(,) 逗號,表達(dá)一個列表值,如在星期字段中使用 1,2,4 ,則表示星期一、星期二、星期四
(/) 斜杠,如 x/y ,x是開始值,y是步長,如在第一位(秒)使用 0/15,表示從0秒開始,每15秒

官方解釋:
0 0 3 * * ?         每天 3 點(diǎn)執(zhí)行
0 5 3 * * ?         每天 3 點(diǎn) 5 分執(zhí)行
0 5 3 ? * *         每天 3 點(diǎn) 5 分執(zhí)行
0 5/10 3 * * ?      每天 3 點(diǎn) 5 分,15 分,25 分,35 分,45 分,55 分這幾個點(diǎn)執(zhí)行
0 10 3 ? * 1        每周星期天的 3 點(diǎn)10 分執(zhí)行,注:1 表示星期天
0 10 3 ? * 1#3      每個月的第三個星期的星期天 執(zhí)行,#號只能出現(xiàn)在星期的位置

注:第六位(星期幾)中的數(shù)字可能表達(dá)不太正確,可以使用英文縮寫來表示,如:Sun
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容