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

