一、場景及背景描述
常見幾種定時任務比較:
定時任務框架
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.sinitialdelay
和initialdelaystring
必須和非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...