Scheduled 註解排程器深入解讀

2021-10-19 21:45:45 字數 4066 閱讀 9902

一、場景及背景描述

常見幾種定時任務比較:

定時任務框架

cron 表示式

固定間隔執行

固定頻率執行

任務持久化

開發難易度

jdk timertask

不支援支援

支援不支援

簡單spring schedule

支援支援

支援不支援

一般quartz

支援支援

支援支援

複雜後續文章將會給出以上所有定時器的實現方式

二、@scheduled 註解排程器的實現

新增spring boot依賴

>

>

>

org.springframework.bootgroupid

>

>

spring-boot-starterartifactid

>

dependency

>

>

>

org.springframework.bootgroupid

>

>

spring-boot-starter-testartifactid

>

>

testscope

>

dependency

>

dependencies

>

應用主啟動類新增@enablescheduling註解

/**

* spring boot scheduled sample 演示啟動類

* * @author rambo

* @date 2021/02/19 17:06

* @since 1.0.0.1

*/@enablescheduling

public

class

}

在需要實現排程任務的方法上新增@scheduled註解並設定相應的排程週期即可

@scheduled註解所支援的引數

引數屬性

屬性描述

cron

cron表示式,指定任務在特定時間執行

fixeddelay

表示上一次任務執行完成後多久再次執行,引數型別為long,單位ms

fixeddelaystring

與fixeddelay含義一樣,只是引數型別變為string

fixedrate

表示按一定的頻率執行任務,引數型別為long,單位ms

fixedratestring

與fixedrate的含義一樣,只是將引數型別變為string

initialdelay

表示延遲多久再第一次執行任務,引數型別為long,單位ms

initialdelaystring

與initialdelay的含義一樣,只是將引數型別變為string

zone

時區,預設為當前時區,一般沒有用到

三、@scheduled 註解任務排程詳細說明

1、cron 表示式的使用方式

表示式定義規則

cron表示式由 6 或 7 個空格分隔的時間字段組成

位置時間網域名稱

允許值允許的特殊字元1秒鐘

0~59

, - * /2分鐘

0~59

, - * /3小時

0~23

, - * /4日期

1~31

, - * ? / l w c5月份

1~12

, - * /6星期

1~7, - * ? / l c #

7年(可選)

空值 1970~2099

, - * /

常用表示式

表示式功能描述

0/30 * * * * *

每30秒執行一次

0 0/5 * * * *

每5分鐘執行一次

0 0 0 * * *

每天凌晨執行一次

0 0 9,12,18 * * *

每天9點、12點、18點整執行一次

0 30 3-5 * * *

每天 3~5點 30分執行一次

新增乙個crontest方法,並且設定每5秒執行一次,並且每次執行耗時10秒

/**

* 使用 @scheduled 註解的前提:在啟動類開啟了 @enablescheduling 註解

* * @author rambo

* @date 2021/2/20 09:55

*/@scheduled

(cron =

"0/5 * * * * ?"

)public

void

crontest()

throws interruptedexception

當方法執行時間超過任務排程頻率,排程器會在(耗時 + 排程頻率)後執行,即:第一次排程任務開始到任務結束以後(無論耗時多長)這一刻開始,再重新開始計時頻率

2、fixeddelay & fixeddelaystring 的使用方式

新增乙個fixeddelaytest方法,每隔5秒執行一次,每次耗時10秒

// @scheduled(fixeddelay = 1000*5)

@scheduled

(fixeddelaystring =

"5000"

)public

void

fixeddelaytest()

throws interruptedexception

當執行頻率小於執行耗時都場景,下一次排程的時間是 (耗時 + 排程頻率)的時間

3、fixedrate & fixedratestring 的使用方式

新增乙個fixedratetest方法,每隔5秒執行一次,每次耗時10秒

// @scheduled(fixedrate = 1000*5)

@scheduled

(fixedratestring =

"50000"

)public

void

fixedratetest()

throws interruptedexception

效果說明

4、initialdelay & initialdelaystring 的使用方式

新增乙個initialdelaytest方法,每隔5秒執行一次,每次耗時10秒

// @scheduled(initialdelay = 10000, fixeddelay = 5000)

@scheduled

(initialdelaystring =

"10000"

, fixeddelay =

5000

)public

void

initialdelaytest()

throws interruptedexception

p.sinitialdelayinitialdelaystring必須和非cron表示式都其它兩組組合使用

效果說明

Scheduled註解的用法

cron表示式是乙個字串,字串以5或6個空格隔開,分為6或7個域,每乙個域代表乙個含義,cron有如下兩種語法格式 每乙個域可出現的字元如下 seconds 可出現 四個字元,有效範圍為0 59的整數 minutes 可出現 四個字元,有效範圍為0 59的整數 hours 可出現 四個字元,有效範圍...

定時任務註解 Scheduled

scheduled cron 0 0 2 每天凌晨兩點執行 void dosomethingwith 乙個cron表示式有至少6個 也可能7個 有空格分隔的時間元素。按順序依次為 秒 0 59 分鐘 0 59 小時 0 23 天 月 0 31,但是你需要考慮你月的天數 月 0 11 天 星期 1 7...

Spring 排程任務 scheduled學習總結

springboot技術學習 工作中使用scheduled標籤,非常的便於開發,但是此標籤以為不靈活,沒法動態設定間隔時間,查閱標籤後發現,可以設定動態時間到props中,非常方便 propertysource classpath root test.props 然後修改你的 scheduled c...