最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring??@Scheduled中這些參數(shù)的區(qū)別、組合和應(yīng)用場(chǎng)景解析

 更新時(shí)間:2026年01月08日 09:00:19   作者:VipSoft  
SpringBoot中的定時(shí)任務(wù)調(diào)度提供了多種方式,包括?cron?表達(dá)式、fixedRate、fixedDelay?和?initialDelay,每種方式都有其特點(diǎn)和適用場(chǎng)景,通過合理配置,可以滿足不同任務(wù)的調(diào)度需求,本文介紹Spring??@Scheduled中這些參數(shù)的區(qū)別、組合和應(yīng)用場(chǎng)景解析,感興趣的朋友一起看看吧

SpringBoot Scheduled 常見用法:http://m.fzitv.net/program/33832939q.htm

1. 基本概念對(duì)比

cron

  • 定義:使用 Unix/Linux 風(fēng)格的 cron 表達(dá)式
  • 語法秒 分 時(shí) 日 月 周 年(可選)
  • 特點(diǎn)
    • 基于日歷的調(diào)度
    • 執(zhí)行時(shí)間固定
    • 適合在特定時(shí)間點(diǎn)執(zhí)行任務(wù)
// 每天凌晨1點(diǎn)執(zhí)行
@Scheduled(cron = "0 0 1 * * ?")
// 每5分鐘執(zhí)行(在每分鐘的0秒執(zhí)行)
@Scheduled(cron = "0 */5 * * * ?")
// 每小時(shí)的10分、30分、50分執(zhí)行
@Scheduled(cron = "0 10,30,50 * * * ?")

fixedRate

  • 定義:固定頻率執(zhí)行,從上一次開始時(shí)間開始計(jì)算間隔
  • 特點(diǎn)
    • 固定頻率,不關(guān)心任務(wù)執(zhí)行時(shí)間
    • 如果任務(wù)執(zhí)行時(shí)間超過間隔,會(huì)立即開始下一次執(zhí)行
    • 可能造成任務(wù)重疊
// 每5分鐘執(zhí)行一次(從上次開始算起)
@Scheduled(fixedRate = 5 * 60 * 1000)

fixedDelay

  • 定義:固定延遲執(zhí)行,從上一次結(jié)束時(shí)間開始計(jì)算間隔
  • 特點(diǎn)
    • 保證任務(wù)執(zhí)行間隔
    • 不會(huì)出現(xiàn)任務(wù)重疊
    • 適合需要保證任務(wù)串行執(zhí)行的場(chǎng)景
// 上次執(zhí)行結(jié)束后,等待5分鐘再執(zhí)行下次
@Scheduled(fixedDelay = 5 * 60 * 1000)

initialDelay

  • 定義:首次執(zhí)行延遲時(shí)間
  • 特點(diǎn)
    • 只在第一次執(zhí)行前等待
    • 可以與 fixedRate 或 fixedDelay 組合使用
    • 不影響后續(xù)執(zhí)行間隔
// 應(yīng)用啟動(dòng)后等待10分鐘,然后每5分鐘執(zhí)行一次
@Scheduled(initialDelay = 10 * 60 * 1000, fixedRate = 5 * 60 * 1000)

2. 執(zhí)行行為對(duì)比

假設(shè)任務(wù)執(zhí)行需要2分鐘:

// 情況1:fixedRate = 5分鐘
// 時(shí)間線:0分開始→2分結(jié)束→5分開始→7分結(jié)束→10分開始...
// 實(shí)際間隔:3分鐘(5-2)
// 情況2:fixedDelay = 5分鐘  
// 時(shí)間線:0分開始→2分結(jié)束→7分開始→9分結(jié)束→14分開始...
// 實(shí)際間隔:7分鐘(2+5)
// 情況3:cron = "0 */5 * * * ?"
// 時(shí)間線:0分開始→2分結(jié)束→5分開始→7分結(jié)束→10分開始...
// 實(shí)際間隔:3分鐘,但開始時(shí)間固定在0、5、10分

3. 組合使用場(chǎng)景

組合1:initialDelay + fixedRate

@Component
public class DataSyncScheduler {
    // 應(yīng)用啟動(dòng)后等待2小時(shí)(讓其他服務(wù)就緒),然后每30分鐘同步一次
    @Scheduled(initialDelay = 2 * 60 * 60 * 1000, 
               fixedRate = 30 * 60 * 1000)
    public void syncData() {
        // 數(shù)據(jù)同步任務(wù),執(zhí)行時(shí)間較短
    }
}

適用場(chǎng)景

  • 系統(tǒng)啟動(dòng)后需要等待依賴服務(wù)就緒
  • 定時(shí)數(shù)據(jù)同步
  • 緩存刷新

組合2:initialDelay + fixedDelay

@Component
public class ReportGenerator {
    // 應(yīng)用啟動(dòng)后等待5分鐘,然后每次執(zhí)行結(jié)束后等待1小時(shí)再執(zhí)行
    @Scheduled(initialDelay = 5 * 60 * 1000, 
               fixedDelay = 60 * 60 * 1000)
    public void generateReport() {
        // 生成報(bào)表,執(zhí)行時(shí)間較長(zhǎng)(約10-20分鐘)
        // 保證每次生成完成后,休息1小時(shí)再開始
    }
}

適用場(chǎng)景

  • 執(zhí)行時(shí)間較長(zhǎng)的任務(wù)
  • 需要保證任務(wù)不重疊
  • 資源密集型操作

組合3:動(dòng)態(tài)計(jì)算 initialDelay

@Component
public class MaintenanceTask {
    @PostConstruct
    public void init() {
        // 計(jì)算到下一個(gè)整點(diǎn)的延遲
    }
    @Scheduled(cron = "0 0 */2 * * ?", zone = "Asia/Shanghai")
    public void maintenance() {
        // 每2小時(shí)在整點(diǎn)執(zhí)行系統(tǒng)維護(hù)
    }
}

4. 具體應(yīng)用場(chǎng)景推薦

使用 cron 的場(chǎng)景:

  1. 每日定時(shí)任務(wù):每天凌晨備份數(shù)據(jù)庫
  2. 工作日特定時(shí)間:工作日9:00發(fā)送日?qǐng)?bào)
  3. 復(fù)雜時(shí)間規(guī)則:每月最后一天23:30執(zhí)行
  4. 需要固定執(zhí)行時(shí)刻:整點(diǎn)、半點(diǎn)執(zhí)行
// 工作日早上9點(diǎn)執(zhí)行
@Scheduled(cron = "0 0 9 * * MON-FRI")
// 每小時(shí)的第5分鐘執(zhí)行
@Scheduled(cron = "0 5 * * * ?")
// 每月1號(hào)凌晨2點(diǎn)執(zhí)行
@Scheduled(cron = "0 0 2 1 * ?")

使用 fixedRate 的場(chǎng)景:

  1. 監(jiān)控類任務(wù):每30秒檢查系統(tǒng)狀態(tài)
  2. 實(shí)時(shí)數(shù)據(jù)拉取:每5分鐘從API獲取最新數(shù)據(jù)
  3. 心跳檢測(cè):每10秒發(fā)送心跳包
  4. 緩存刷新:定期刷新緩存,不關(guān)心執(zhí)行時(shí)長(zhǎng)
// 實(shí)時(shí)監(jiān)控,頻率優(yōu)先
@Scheduled(fixedRate = 30 * 1000)  // 每30秒
// 頻繁的小任務(wù)
@Scheduled(fixedRate = 5 * 1000)   // 每5秒

使用 fixedDelay 的場(chǎng)景:

  1. 批處理任務(wù):數(shù)據(jù)處理完成后需要冷卻
  2. 文件處理:處理完一個(gè)文件再處理下一個(gè)
  3. API調(diào)用限制:避免觸發(fā)API頻率限制
  4. 數(shù)據(jù)庫操作:大數(shù)據(jù)量操作需要間隔
// 處理大量數(shù)據(jù),需要間隔
@Scheduled(fixedDelay = 10 * 60 * 1000)  // 每次間隔10分鐘
// 調(diào)用有限制的第三方API
@Scheduled(fixedDelay = 2 * 1000)  // 每次間隔2秒,避免限流

使用 initialDelay 的場(chǎng)景:

  1. 應(yīng)用啟動(dòng)延遲:等待配置加載完成
  2. 服務(wù)發(fā)現(xiàn)延遲:等待注冊(cè)中心就緒
  3. 數(shù)據(jù)預(yù)熱:等待緩存加載
  4. 避開啟動(dòng)高峰:應(yīng)用啟動(dòng)后不立即執(zhí)行任務(wù)
// Spring Cloud 配置,等待配置中心就緒
@Scheduled(initialDelay = 30 * 1000, fixedRate = 60 * 1000)
// 緩存預(yù)熱后再執(zhí)行
@Scheduled(initialDelay = 2 * 60 * 1000, cron = "0 */15 * * * ?")

5. 實(shí)際項(xiàng)目中的最佳實(shí)踐

場(chǎng)景:你的需求(8:37啟動(dòng),8:42執(zhí)行)

@Component
public class CustodySyncService {
    @PostConstruct
    public void init() {
        // 可以在這里計(jì)算動(dòng)態(tài)的 initialDelay
    }
    // 方案1:使用 cron + 動(dòng)態(tài)初始延遲(需要自己實(shí)現(xiàn))
    // 方案2:使用 fixedRate + 計(jì)算的 initialDelay
    // 如果堅(jiān)持要整點(diǎn)開始,建議:
    @Scheduled(cron = "0 */5 * * * ?")
    public void syncCustody() {
        // 這種會(huì)固定在 :00, :05, :10 執(zhí)行
    }
    // 如果要從啟動(dòng)時(shí)間算,每5分鐘:
    @Scheduled(fixedRate = 5 * 60 * 1000)
    public void syncCustody2() {
        // 從啟動(dòng)開始算,每5分鐘執(zhí)行
        // 首次執(zhí)行是啟動(dòng)后立即執(zhí)行,除非配合 initialDelay
    }
}

配置建議:

# application.yml
scheduling:
  tasks:
    custody-sync:
      # 從配置讀取,方便不同環(huán)境調(diào)整
      fixed-rate: 300000  # 5分鐘
      initial-delay: ${SYNC_INITIAL_DELAY:120000}  # 默認(rèn)2分鐘
      enabled: true

6. 注意事項(xiàng)

  1. 時(shí)區(qū)問題:cron 表達(dá)式默認(rèn)使用服務(wù)器時(shí)區(qū),建議顯式指定

    @Scheduled(cron = "0 0 9 * * ?", zone = "Asia/Shanghai")
    
  2. 任務(wù)重疊問題

    • fixedRate 可能重疊,使用 @Async 或調(diào)整線程池
    • fixedDelay 保證不重疊
  3. 異常處理

    • 任務(wù)異常不會(huì)影響后續(xù)調(diào)度
    • 建議在方法內(nèi)部處理異常
  4. 應(yīng)用集群部署

    • 所有節(jié)點(diǎn)都會(huì)執(zhí)行定時(shí)任務(wù)
    • 需要使用分布式鎖或任務(wù)調(diào)度中間件(如XXL-JOB)

根據(jù)你的具體需求,我建議:

  • 如果需要嚴(yán)格的固定時(shí)間點(diǎn) → 用 cron
  • 如果需要固定頻率且不關(guān)心重疊 → 用 fixedRate
  • 如果需要保證任務(wù)串行 → 用 fixedDelay
  • 如果需要延遲啟動(dòng) → 配合 initialDelay

到此這篇關(guān)于Spring @Scheduled中這些參數(shù)的區(qū)別、組合和應(yīng)用場(chǎng)景解析的文章就介紹到這了,更多相關(guān)SpringBoot Scheduled用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaEE實(shí)現(xiàn)文件下載

    JavaEE實(shí)現(xiàn)文件下載

    這篇文章主要介紹了JavaEE實(shí)現(xiàn)文件下載的方法,非常的實(shí)用,需要的朋友可以參考下
    2014-10-10
  • 簡(jiǎn)單了解4種分布式session解決方案

    簡(jiǎn)單了解4種分布式session解決方案

    這篇文章主要介紹了簡(jiǎn)單了解4種分布式session解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java 線程創(chuàng)建方式全過程

    Java 線程創(chuàng)建方式全過程

    本文介紹了繼承Thread類、實(shí)現(xiàn)Runnable接口和Callable接口創(chuàng)建線程的方法,以及線程池的使用理邏輯和任務(wù)處理機(jī)制,并重點(diǎn)講解了線程池參數(shù)配置、常用阻塞隊(duì)列和拒絕策略、線程池的優(yōu)勢(shì)和應(yīng)用場(chǎng)景、虛擬線程的特點(diǎn)和創(chuàng)建方法、ScheduledThreadPool線程池原理和使用方法
    2026-05-05
  • mac系統(tǒng)如何下載和安裝jdk的三種方式

    mac系統(tǒng)如何下載和安裝jdk的三種方式

    這篇文章主要介紹了mac系統(tǒng)下載和安裝jdk的三種方式,每種方法都有其特點(diǎn),如安裝來源及可靠性、安裝過程及便捷性、版本管理及切換、環(huán)境配置、jdk默認(rèn)安裝路徑以及占用空間及資源管理等,需要的朋友可以參考下
    2025-01-01
  • Java SpringBoot集成ChatGPT實(shí)現(xiàn)AI聊天

    Java SpringBoot集成ChatGPT實(shí)現(xiàn)AI聊天

    ChatGPT已經(jīng)組件放開了,現(xiàn)在都可以基于它寫插件了,也許可以用它結(jié)合文字語音開發(fā)一個(gè)老人小孩需要的智能的說話陪伴啥的,這篇文章就介紹SpringBoot結(jié)合ChatGPT實(shí)現(xiàn)AI聊天感興趣的同學(xué)可以借鑒一下
    2023-04-04
  • SpringBoot結(jié)果封裝和異常攔截的實(shí)現(xiàn)示例

    SpringBoot結(jié)果封裝和異常攔截的實(shí)現(xiàn)示例

    SpringBoot 項(xiàng)目中,我們通常需要將結(jié)果數(shù)據(jù)封裝成特定的格式,以方便客戶端進(jìn)行處理,本文主要介紹了SpringBoot?優(yōu)雅的結(jié)果封裝和異常攔截,感興趣的可以了解一下
    2023-08-08
  • Java泛型變量如何添加約束

    Java泛型變量如何添加約束

    這篇文章主要介紹了Java泛型變量如何添加約束,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java enum 對(duì)枚舉元素的賦值和取值方式

    Java enum 對(duì)枚舉元素的賦值和取值方式

    這篇文章主要介紹了Java enum 對(duì)枚舉元素的賦值和取值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java實(shí)現(xiàn)字符串轉(zhuǎn)為駝峰格式的方法詳解

    Java實(shí)現(xiàn)字符串轉(zhuǎn)為駝峰格式的方法詳解

    這篇文章主要介紹了如何利用Java語言實(shí)現(xiàn)字符串轉(zhuǎn)為駝峰格式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • SpringBoot整合Scala構(gòu)建Web服務(wù)的方法

    SpringBoot整合Scala構(gòu)建Web服務(wù)的方法

    這篇文章主要介紹了SpringBoot整合Scala構(gòu)建Web服務(wù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論

秦安县| 虎林市| 云南省| 临清市| 眉山市| 巩义市| 临沂市| 阳东县| 宜章县| 中西区| 新兴县| 安福县| 定结县| 汉川市| 鸡东县| 安化县| 尖扎县| 班戈县| 涞源县| 营山县| 册亨县| 富川| 紫阳县| 台安县| 扬州市| 肥城市| 遵义县| 武功县| 连平县| 晋江市| 吉安县| 建瓯市| 根河市| 西安市| 乐东| 霍州市| 班玛县| 凤冈县| 吉林省| 兰州市| 舞阳县|