@scheduled註解是包org.springframework.scheduling.annotation中的乙個註解,主要是用來開啟定時任務。
@target()
@retention(retentionpolicy.runtime)
@documented
@repeatable(schedules.class)
public @inte***ce scheduled
根據註解原始碼可知,該註解是方法宣告式註解和註解型別宣告式註解。
fixeddelay
fixedrate@scheduled(fixeddelay = 5000)
//將乙個方法以上乙個呼叫任務的完成之間為基準,在上乙個任務完成之後,5s後再執行該方法。
public void dosomething()
上述兩個重要的引數只是提了簡單的定時呼叫規則,當需要更為複雜的呼叫時我們可以通過引數cron進行設定。@scheduled(fixedrate = 5000)
//將乙個方法以固定速率5s呼叫一次執行,這個週期是乙個任務開始時間為基準,從上乙個任務開始執行後5秒後再呼叫一次。
public void dosomething()
我們可以通過引數corn來編寫表示式,然後通過表示式來配置任務的執行時間。其中每個corn表示式中至少會存在6個用空格分隔的時間元素,它們順序依次為:
seconds minutes hours dayofmonth month dayofweekcron格式中每個時間元素的說明
時間元素可出現的字元有效數值範圍
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...