Spingboot定時任務

2021-10-02 16:17:46 字數 3985 閱讀 8283

1.pom依賴:

引入springboot starter包即可

>

>

>

org.springframework.bootgroupid

>

>

spring-boot-starterartifactid

>

dependency

>

dependencies

>

2.啟動類啟用定時任務:

在啟動類上加註解:@enablescheduling即可實現。

@enablescheduling

public

class

}3.建立定時任務實現類(單執行緒和多執行緒版本):

3.1 單執行緒定時任務:

@component

public

class

scheduledtask

")@scheduled

(fixedrate =

6000

)public

void

gettask1()

@scheduled

(cron =

"$")

public

void

gettask2()

}

jobs.fixeddelay=6000

jobs.cron=0/5 * * * * ?

執行結果:

3.2 多執行緒定時任務:

加乙個多執行緒配置類,ok

@configuration

public class scheduleconfig implements schedulingconfigurer

}

結果如下:

可以看到開啟了多個執行緒

還可以基於註解**@enableasync@async**非同步執行定時任務,也是多執行緒

@component

@enableasync

public

class

scheduledtask")

public

void

gettask1()

@async

@scheduled

(cron =

"$")

public

void

gettask2()

}

或者增加配置類定義執行緒池的一些資訊

@configuration

@enableasync

public

class

asyncconfig

}

4.引數說明:

@scheduled的**

public @inte***ce

scheduled

@scheduled接受多種定時引數的設定(主要分為兩類cornexpression和rate/delay表示式):

​ (1)cron:cron表示式,指定任務在特定時間執行;

​ (3)fixeddelaystring:與fixeddelay含義一樣,只是引數型別變為string;

​ (4)fixedrate:表示按一定的頻率執行任務,引數型別為long,單位ms;

​ (5)fixedratestring: 與fixedrate的含義一樣,只是將引數型別變為string;

​ (6)initialdelay:表示延遲多久再第一次執行任務,引數型別為long,單位ms;

​ (7)initialdelaystring:與initialdelay的含義一樣,只是將引數型別變為string;

​ (8)zone:時區,預設為當前時區,一般沒有用到。

☆☆☆☆☆fixedrate和fixeddelay 的區別

@scheduled(initialdelay=1000, fixedrate=6000):第一次延遲1秒後執行,之後按fixedrate的規則每6秒執行一次

cornexpression表示式詳解:

字段允許值

允許特殊字元

秒0-59

, - * /

分0-59

, - * /

小時0-23

, - * /

日1-31

, - * ? / l w c

月1-12或jan-dec

, - * /

周1-7或sun-sat

, - * ? / l c #

年留空或1970-2099

, - * /

cron一共有7位,但是最後一位是年,可以留空,所以我們可以寫6位:

☆☆☆☆☆

* 表示所有值,在分鐘裡表示每一分鐘觸發。在小時,日期,月份等裡面表示每一小時,每一日,每一月。

? 表示不指定值。表示不關心當前位置設定的值。 比如不關心是週幾,則周的位置填寫?。  主要是由於日期跟週是有重複的所以兩者必須有一者設定為?

- 表示區間。小時設定為10-12表示10,11,12點均會觸發。

, 表示多個值。 小時設定成10,12表示10點和12點會觸發。

/ 表示遞增觸發。 5/15表示從第5秒開始,每隔15秒觸發。

l 表示最後的意思。 日上表示最後一天。星期上表示星期六或7。 l前加資料,表示該資料的最後乙個。

星期上設定6l表示最後乙個星期五。 6表示星期五

w 表示離指定日期最近的工作日觸發。15w離該月15號最近的工作日觸發。

#表示每月的第幾個週幾。 6#3表示該月的第三個周五。

示例:​ 「0 30 8,13 * * ?」 每天8點30 13點30

​ "0 0 9,14 * * ? #每天9點 14點

​ "0 50 7,15 * * ? 周一到周五是上午7:20執行,週六是15:20執行

"0 0 12 * * ?" 每天中午12點觸發
「0 15 10 ? * *」 每天上午10:15觸發

「0 15 10 * * ?」 每天上午10:15觸發

「0 15 10 * * ? *」 每天上午10:15觸發

「0 15 10 * * ? 2005」 2023年的每天上午10:15觸發

「0 * 14 * * ?」 在每天下午2點到下午2:59期間的每1分鐘觸發

「0 0/5 14 * * ?」 在每天下午2點到下午2:55期間的每5分鐘觸發

「0 0/5 14,18 * * ?」 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發

「0 0-5 14 * * ?」 在每天下午2點到下午2:05期間的每1分鐘觸發

「0 10,44 14 ? 3 wed」 每年三月的星期三的下午2:10和2:44觸發

「0 15 10 ? * mon-fri」 周一至周五的上午10:15觸發

「0 15 10 15 * ?」 每月15日上午10:15觸發

「0 15 10 l * ?」 每月最後一日的上午10:15觸發

「0 15 10 ? * 6l」 每月的最後乙個星期五上午10:15觸發

「0 15 10 ? * 6l 2002-2005」 2023年至2023年的每月的最後乙個星期五上午10:15觸發

「0 15 10 ? * 6#3」 每月的第三個星期五上午10:15觸發

每天早上6點 0 6 * * * 每兩個小時 0 */2 * * *

晚上11點到早上8點之間每兩個小時,早上八點 0 23-7/2,8 * * *

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 0 11 4 * 1-3

1月1日早上4點 0 4 1 1 *

reference :

linux定時任務 at定時任務

at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...

at定時任務

at的守護程序每60秒檢查一次作業佇列,有作業時檢查作業,時間恰好達到,則執行作業。前提 保證atd程序已經啟動,檢查atd程序是否啟動 ps ef grep atd。atd的命令格式 at 選項 時間 ctrl d 結束at命令的輸入。選項 m 任務完成後給使用者傳送郵件,沒有標準輸出。i atg...

at定時任務

1 at是只執行一次,執行完後任務刪除。at的守護程序atd會以後臺模式執行,檢查作業佇列來執行。2 預設 atd每60秒巡邏一次,有作業時候,檢查作業時間,如果和當前時間一樣,就執行任務 3 在使用at命令的時候,一定要保證他的守護者atd程序的啟動。用ps ef grep atd來檢視atd是否...