Spring?@Scheduled定時器注解使用方式
更新時間:2024年08月02日 08:40:50 作者:杜小舟
這篇文章主要介紹了Spring?@Scheduled定時器注解使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
引言
@Scheduled 是用于在 Spring 框架中為方法配置定時任務的注解,它允許在一定的時間間隔或在特定的時間點運行一個方法,我們一般將該方法放在服務類中。
主要屬性介紹
屬性名稱 | 介紹 |
---|---|
fixedRate | 以指定的毫秒數(shù)間隔連續(xù)執(zhí)行方法。每次執(zhí)行開始的時間都是固定的間隔時間。示例:@Scheduled(fixedRate = 5000) 表示該方法每5秒執(zhí)行一次 |
fixedDelay | 以指定的毫秒數(shù)間隔執(zhí)行方法。方法執(zhí)行完畢后,等待給定的延遲時間,然后開始下一次執(zhí)行。示例:@Scheduled(fixedDelay = 5000) 表示方法執(zhí)行完畢后等待5秒,然后再執(zhí)行下一次。 |
cron | 使用Cron表達式配置定時任務。Cron表達式可以非常靈活地指定任務的執(zhí)行時間。示例:@Scheduled(cron = “0 0 * * * ?”) 表示每天的整點執(zhí)行一次該方法 |
initialDelay | 在系統(tǒng)初始延遲時間之后開始首次執(zhí)行。示例:@Scheduled(initialDelay = 2000, fixedRate = 5000) 在系統(tǒng)初始后,延遲2秒后開始,然后每5秒執(zhí)行一次 |
cron 語法
簡單介紹
Cron 表達式是一種由6到7個字段組成的字符串,每個字段代表時間的一個部分。
這些字段以空格分隔,依次是:
- 秒(0-59)
- 分鐘(0-59)
- 小時(0-23)
- 日期(1-31)
- 月份(1-12或JAN-DEC)
- 星期(1-7或SUN-SAT,周日為1)
- 年份(可選)
通常你會看到6個字段的Cron表達式(年份通常不使用)。
每個字段中的值可以是數(shù)字、特殊符號或者范圍表示。
特殊符號
- *(星號):表示所有可能的值。如在分鐘字段中使用,表示每分鐘觸發(fā)。
- ?(問號):僅在日期和星期字段中使用。表示不指定值,通常是因為在另一個字段中已經(jīng)指定了條件。
- -(連字符):表示一個范圍。例如,1-5表示從1到5的范圍。
- ,(逗號):表示列出多個值。例如,1,3,5表示1、3和5。
- /(斜杠):表示步長。例如,0/15在秒字段中表示從0秒開始每15秒觸發(fā)。
- L:在日期字段中表示最后一天;在星期字段中表示最后一個星期幾。例如,L在日期字段中表示該月的最后一天,在星期字段中表示周六。
- W:表示工作日(星期一至五)。例如,15W表示離15號最近的工作日。
- #:在星期字段中使用,表示一個特定的星期幾。例如,2#3表示每月的第三個星期二
例子
- 每天早上9點執(zhí)行一次
@Scheduled(cron = "0 0 9 * * ?")
- 每月的第一個星期一早上10點執(zhí)行
@Scheduled(cron = "0 0 10 ? * 2#1")
- 每周三和周五下午2點執(zhí)行
@Scheduled(cron = "0 0 14 ? * 3,5")
- 每隔10分鐘執(zhí)行一次
@Scheduled(cron = "0 */10 * * * ?")
- 每個月的最后一天晚上11點執(zhí)行
@Scheduled(cron = "0 0 23 L * ?")
使用 @Scheduled 注解注意事項
線程安全
- @Scheduled 注解的方法可能會被多個線程同時執(zhí)行。
- 如果方法不是線程安全的,可能導致數(shù)據(jù)競爭和其他并發(fā)問題。
- 因此,在使用 @Scheduled 注解時,確保方法是線程安全的。
執(zhí)行時間
- 如果定時任務的執(zhí)行時間比間隔時間長,會導致方法重疊執(zhí)行。
- 根據(jù)需要調(diào)整 fixedRate 參數(shù)或 fixedDelay 參數(shù)。
配置
- 確保在 Spring 配置文件中啟用了任務調(diào)度。
- 通常在主應用類或配置類中使用 @EnableScheduling 注解。
異常處理
- 在定時任務中要注意異常處理,以免任務在發(fā)生錯誤時被中斷。
- 可以通過捕獲和記錄異常,或者重試失敗任務來提高可靠性。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java中spring boot 字符串判斷是否為空方法小結
這篇文章主要介紹了Java中spring boot字符串判斷是否為空,通過安裝依賴,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11Java利用Socket和IO流實現(xiàn)文件的上傳與下載
本文主要介紹了Java利用Socket和IO流實現(xiàn)文件的上傳與下載,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類型一覽表
這篇文章主要介紹了MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類型一覽表,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01springboot網(wǎng)站應用使用第三方qq登錄的實現(xiàn)過程
這篇文章主要介紹了springboot網(wǎng)站應用使用第三方qq登錄,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09