回顧定時任務註解 Scheduled

2021-10-25 17:10:00 字數 3198 閱讀 3872

@scheduled註解是包org.springframework.scheduling.annotation中的乙個註解,主要是用來開啟定時任務。

@target()

@retention(retentionpolicy.runtime)

@documented

@repeatable(schedules.class)

public @inte***ce scheduled

根據註解原始碼可知,該註解是方法宣告式註解和註解型別宣告式註解。

fixeddelay

@scheduled(fixeddelay = 5000)

//將乙個方法以上乙個呼叫任務的完成之間為基準,在上乙個任務完成之後,5s後再執行該方法。

public void dosomething()

fixedrate

@scheduled(fixedrate = 5000)

//將乙個方法以固定速率5s呼叫一次執行,這個週期是乙個任務開始時間為基準,從上乙個任務開始執行後5秒後再呼叫一次。

public void dosomething()

上述兩個重要的引數只是提了簡單的定時呼叫規則,當需要更為複雜的呼叫時我們可以通過引數cron進行設定。

我們可以通過引數corn來編寫表示式,然後通過表示式來配置任務的執行時間。其中每個corn表示式中至少會存在6個用空格分隔的時間元素,它們順序依次為:

seconds minutes hours dayofmonth month dayofweek

cron格式中每個時間元素的說明

時間元素可出現的字元有效數值範圍

seconds

,- * /

0~59

minutes

,- * /

0~59

hours

,- * /

0~23

dayofmonth

,- * / ? l w

0~31

month

,- * /

1~12

dayofweek

,- * / ? l #

1~7或者sun~sat

cron格式中特殊字元說明字元

作用舉例

,列出列舉值

在minutes域中使用6,8,則表示6分鐘和8分鐘各觸發一次

-表示觸發的範圍值

在minutes域中使用6-8,則表示從6分鐘到8分鐘之間每分鐘觸發一次

*匹配任意值

在minutes域中使用*,則表示每分鐘都會觸發一次

/起始時間開始觸發,每隔固定時間觸發一次

在minutes域中使用6/8,表示5分鐘觸發一次,每10分鐘再觸發一次

?在dayofmonth和dayofweek中,用於匹配任意值

在dayofmonth域使用?,表示每天都觸發一次

#在dayofmonth中,確定第幾個星期幾

7#3表示第三個星期六

l表示最後

在dayofweek中使用6l,表示在最後乙個星期五觸發

w表示有效工作日(周一到周五)

在dayofmonth使用5w,如果5日是星期六,則將最近的工作日4日觸發一次

注意:lw是可以連用,表示在某個月最後乙個工作日,#是用來確定每個月第幾個星期幾的,只能出現在dayofmonth域中。

常用的cron表示式

每隔5秒執行一次:"*/5 * * * * ?"

每隔1分鐘執行一次:"0 */1 * * * ?"

每天23點執行一次:"0 0 23 * * ?"

每天凌晨1點執行一次:"0 0 1 * * ?"

每月1號凌晨1點執行一次:"0 0 1 1 * ?"

每月最後一天23點執行一次:"0 0 23 l * ?"

每週星期天凌晨1點實行一次:"0 0 1 ? * l"

在26分、29分、33分執行一次:"0 26,29,33 * * * ?"

每天的0點、13點、18點、21點都執行一次:"0 0 0,13,18,21 * * ?"

每天上午10點,下午2點,4點:"0 0 10,14,16 * * ?"

朝九晚五工作時間內每半小時:"0 0/30 9-17 * * ?"

表示每個星期三中午12點:"0 0 12 ? * wed"

每天中午12點觸發:"0 0 12 * * ?"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

定時任務註解

定時任務 scheduled fixedrate 3000 3秒後執行下一次任務 scheduled fixeddelay 3000 任務結束後3秒執行下一次任務 scheduled fixedrate 3000 存在問題及解決方案 如果任務執行時間超過3秒,那麼執行緒會被阻塞,並不會新建執行緒去跑...

Spring定時任務註解

1.功能描述 需要起乙個定時任務,定期去重新整理快取中的資料 2.操作步驟 a 本專案使用的是spring boot,在入口處加上註解 enablescheduling,並在定時任務的方法處加上 scheduled cron 0 0 1 即可1min起乙個定時任務 3.scheduled註解的引數 ...

定時任務註解 Scheduled

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