今天,按照設(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