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

SpringBoot之@Scheduled注解用法解讀

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

SpringBoot之@Scheduled注解用法

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

以下是詳細(xì)解析:

1. 啟用定時任務(wù)‌

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

@Configuration
@EnableScheduling
public class AppConfig {
}

‌2. 基本用法‌

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

@Component
public class ScheduledTasks {

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

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

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

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

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

‌(1) fixedDelay‌

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

‌(2) fixedRate‌

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

‌(3) initialDelay‌

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

‌(4) cron‌

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

‌4. 線程池配置‌

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

@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. 注意事項(xiàng)‌

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

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

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

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

‌6. 常見問題‌

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

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

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

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

‌Q3:如何調(diào)試定時任務(wù)?‌

  • 開啟 Spring 的調(diào)試日志:logging.level.org.springframework.scheduling=DEBUG

‌總結(jié)‌

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

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

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

相關(guān)文章

  • Java中的Semaphore原理解析

    Java中的Semaphore原理解析

    這篇文章主要介紹了Java中的Semaphore原理解析,Semaphore(信號量)是用來控制同時訪問特定資源的線程數(shù)量,它通過協(xié)調(diào)各個線程,以保證合理的使用公共資源,需要的朋友可以參考下
    2024-01-01
  • java將excel轉(zhuǎn)為pdf的方法步驟

    java將excel轉(zhuǎn)為pdf的方法步驟

    之前工作需要,查了挺多種Excel轉(zhuǎn)PDF的方法,下面這篇文章主要給大家介紹了關(guān)于java將excel轉(zhuǎn)為pdf的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java實(shí)現(xiàn)泡泡堂對戰(zhàn)版游戲的示例代碼

    Java實(shí)現(xiàn)泡泡堂對戰(zhàn)版游戲的示例代碼

    本文將利用Java制作經(jīng)典游戲《泡泡堂》,文中使用了MVC模式,分離了模型、視圖和控制器,使得項(xiàng)目結(jié)構(gòu)清晰易于擴(kuò)展,感興趣的可以了解一下
    2022-04-04
  • 關(guān)于java開發(fā)的性能問題總結(jié)(必看)

    關(guān)于java開發(fā)的性能問題總結(jié)(必看)

    下面小編就為大家?guī)硪黄P(guān)于java開發(fā)的性能問題總結(jié)(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 基于Spring-cloud-gateway實(shí)現(xiàn)全局日志記錄的方法

    基于Spring-cloud-gateway實(shí)現(xiàn)全局日志記錄的方法

    最近項(xiàng)目在線上運(yùn)行出現(xiàn)了一些難以復(fù)現(xiàn)的bug需要定位相應(yīng)api的日志,通過nginx提供的api請求日志難以實(shí)現(xiàn),于是在gateway通過全局過濾器記錄api請求日志,本文給大家介紹基于Spring-cloud-gateway實(shí)現(xiàn)全局日志記錄,感興趣的朋友一起看看吧
    2023-11-11
  • JNDI具體用法詳解

    JNDI具體用法詳解

    JNDI是java命名和目錄接口,本文主要介紹了JNDI具體用法詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • struts2框架的登錄制作圖文教程

    struts2框架的登錄制作圖文教程

    下面小編就為大家?guī)硪黄猻truts2框架的登錄制作圖文教程。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • springboot數(shù)據(jù)庫操作圖文教程

    springboot數(shù)據(jù)庫操作圖文教程

    本文以圖文并茂的形式給大家介紹了springboot數(shù)據(jù)庫操作,感興趣的朋友一起看看吧
    2017-07-07
  • 使用Java實(shí)現(xiàn)簡單的區(qū)塊鏈程序的方法

    使用Java實(shí)現(xiàn)簡單的區(qū)塊鏈程序的方法

    這篇文章主要介紹了使用Java實(shí)現(xiàn)簡單的區(qū)塊鏈程序的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解

    java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解

    這篇文章主要介紹了java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09

最新評論

朝阳市| 乃东县| 长宁县| 四川省| 邮箱| 澎湖县| 杭锦旗| 平塘县| 南陵县| 临西县| 甘南县| 涡阳县| 锦州市| 荣昌县| 麻城市| 通河县| 客服| 台南市| 澎湖县| 庄河市| 介休市| 南宁市| 儋州市| 成都市| 松桃| 广昌县| 中方县| 阜康市| 山东省| 阿拉善盟| 宣城市| 抚顺县| 五指山市| 宜兰县| 湖南省| 新宾| 公安县| 石棉县| 都江堰市| 会昌县| 奉贤区|