欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot之@Scheduled注解用法解讀

 更新時間:2025年03月24日 16:42:35   作者:王小工  
這篇文章主要介紹了SpringBoot之@Scheduled注解用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot之@Scheduled注解用法

@Scheduled 是 Spring Framework 中用于實現(xiàn)定時任務的核心注解,能夠方便地配置方法在特定時間或周期執(zhí)行。

以下是詳細解析:

1. 啟用定時任務‌

在 Spring Boot 中,需在配置類添加 @EnableScheduling 注解以啟用定時任務支持:

@Configuration
@EnableScheduling
public class AppConfig {
}

‌2. 基本用法‌

直接在方法上添加 @Scheduled 注解,并配置執(zhí)行規(guī)則:

@Component
public class ScheduledTasks {

    // 固定延遲(任務結束后的間隔)
    @Scheduled(fixedDelay = 5000)
    public void taskWithFixedDelay() {
        // 每隔5秒執(zhí)行一次(任務完成后開始計時)
    }

    // 固定速率(任務開始的間隔)
    @Scheduled(fixedRate = 3000)
    public void taskWithFixedRate() {
        // 每隔3秒執(zhí)行一次(任務開始后開始計時)
    }

    // 初始延遲(首次執(zhí)行前的等待時間)
    @Scheduled(initialDelay = 10000, fixedRate = 5000)
    public void taskWithInitialDelay() {
        // 首次延遲10秒,之后每隔5秒執(zhí)行一次
    }

    // Cron表達式(復雜時間規(guī)則)
    @Scheduled(cron = "0 0 12 * * ?")
    public void taskWithCronExpression() {
        // 每天中午12點執(zhí)行
    }
}

‌3. 參數(shù)詳解‌

‌(1) fixedDelay‌

  • 作用‌:任務結束后的固定延遲時間(單位:毫秒)。
  • 示例‌:@Scheduled(fixedDelay = 5000) 表示任務結束后等待5秒再執(zhí)行下一次。
  • 適用場景‌:需確保前一次任務完成后再執(zhí)行下一次。

‌(2) fixedRate‌

  • 作用‌:任務開始的固定時間間隔(單位:毫秒)。
  • ‌示例‌:@Scheduled(fixedRate = 3000) 表示每隔3秒執(zhí)行一次(無論前一次任務是否完成)。
  • 注意‌:若任務執(zhí)行時間超過間隔時間,可能導致任務重疊(需結合線程池配置)。

‌(3) initialDelay‌

  • 作用‌:首次任務執(zhí)行前的初始延遲時間(單位:毫秒)。
  • ‌示例‌:@Scheduled(initialDelay = 10000, fixedRate = 5000) 表示首次延遲10秒后執(zhí)行,之后每隔5秒執(zhí)行一次。

‌(4) cron‌

  • ‌作用‌:通過 Cron 表達式定義復雜調度規(guī)則。
  • Cron 表達式格式‌:秒 分 時 日 月 周 年(可選)
  • ‌常用示例‌:
    • 0 0 10 * * ?:每天上午10點執(zhí)行。
    • 0 0/5 14 * * ?:每天下午2點開始,每隔5分鐘執(zhí)行一次。
    • 0 15 10 ? * MON-FRI:每周一至周五上午10:15執(zhí)行。
  • ‌在線工具‌:推薦使用 Cron表達式生成器。

‌4. 線程池配置‌

默認情況下,定時任務使用單線程執(zhí)行。若任務耗時較長,需配置線程池避免阻塞:

@Configuration
public class SchedulerConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(taskExecutor());
    }

    @Bean(destroyMethod = "shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(10); // 自定義線程數(shù)
    }
}

‌5. 注意事項‌

1‌. 避免長時間阻塞‌:若任務執(zhí)行時間超過調度間隔,需合理設計邏輯或配置線程池。

2‌. 分布式環(huán)境問題‌:在集群中,定時任務可能被多個實例重復執(zhí)行。解決方案:

  • 使用分布式鎖(如 Redis 或 ZooKeeper)。
  • 通過數(shù)據(jù)庫唯一標識控制任務執(zhí)行。

‌3. 動態(tài)調整‌:默認 @Scheduled 參數(shù)不支持動態(tài)修改。如需動態(tài)調度,可結合 ScheduledTaskRegistrar 或使用 Quartz 框架。

‌6. 常見問題‌

‌Q1:Cron 表達式中的 ? 和 * 有什么區(qū)別?‌

  • * 表示任意值(如:* 在“日”字段表示每天)。
  • ? 用于“日”和“周”字段的互斥條件(避免沖突)。

‌Q2:如何避免任務重復執(zhí)行?‌

  • 單機環(huán)境:確保任務冪等性。
  • 分布式環(huán)境:使用分布式鎖或數(shù)據(jù)庫唯一約束。

‌Q3:如何調試定時任務?‌

  • 開啟 Spring 的調試日志:logging.level.org.springframework.scheduling=DEBUG

‌總結‌

@Scheduled 是 Spring 中實現(xiàn)定時任務的便捷工具,通過靈活配置 fixedDelay、fixedRate 或 cron 表達式,可以滿足大多數(shù)調度需求。

在復雜場景(如動態(tài)任務或分布式環(huán)境)中,可結合 Quartz 或其他分布式調度框架實現(xiàn)更高級功能。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java中?!=null?的判斷

    Java中?!=null?的判斷

    空指針異常是出現(xiàn)頻率比較高的bug,在出現(xiàn)空指針時,很多小伙伴都是習慣性地加一個?!=null?的判斷,本文就來介紹一下如何使用,給感興趣的可以了解下
    2025-02-02
  • Java數(shù)據(jù)結構超詳細分析二叉搜索樹

    Java數(shù)據(jù)結構超詳細分析二叉搜索樹

    二叉搜索樹是以一棵二叉樹來組織的。每個節(jié)點是一個對象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點的左孩子,right指向該節(jié)點的右孩子,p指向該節(jié)點的父節(jié)點,key是它的值
    2022-03-03
  • 通過代碼實例解析JAVA類生命周期

    通過代碼實例解析JAVA類生命周期

    這篇文章主要介紹了通過代碼實例解析JAVA類生命周期,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • javaWeb使用servlet搭建服務器入門

    javaWeb使用servlet搭建服務器入門

    這篇文章主要為大家詳細介紹了javaWeb使用servlet搭建服務器入門,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java中如何執(zhí)行多條shell/bat命令

    Java中如何執(zhí)行多條shell/bat命令

    這篇文章主要介紹了Java中如何執(zhí)行多條shell/bat命令的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java實現(xiàn)文件上傳、下載、圖片預覽

    java實現(xiàn)文件上傳、下載、圖片預覽

    這篇文章主要介紹了java實現(xiàn)文件上傳、下載、圖片預覽,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • JVM?運行時數(shù)據(jù)區(qū)與JMM?內存模型

    JVM?運行時數(shù)據(jù)區(qū)與JMM?內存模型

    這篇文章主要介紹了JVM?運行時數(shù)據(jù)區(qū)與JMM?內存模型,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值。需要的朋友可以參考一下
    2022-07-07
  • 老生常談Java虛擬機垃圾回收機制(必看篇)

    老生常談Java虛擬機垃圾回收機制(必看篇)

    下面小編就為大家?guī)硪黄仙U凧ava虛擬機垃圾回收機制(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決

    SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決

    這篇文章主要介紹了SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java通過注解翻譯字典的實現(xiàn)示例

    java通過注解翻譯字典的實現(xiàn)示例

    本文主要介紹了java通過注解翻譯字典的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論