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

spring @Scheduled定時(shí)任務(wù)注解使用方法及注意事項(xiàng)小結(jié)

 更新時(shí)間:2025年02月08日 11:17:23   作者:angen2018  
Spring的@Scheduled注解用于定時(shí)任務(wù)調(diào)度,默認(rèn)單線程依次執(zhí)行,可以通過(guò)配置多線程調(diào)度器或使用@Async注解實(shí)現(xiàn)并行執(zhí)行,常見(jiàn)參數(shù)包括cron、fixedRate、fixedDelay、initialDelay等,本文介紹spring @Scheduled定時(shí)任務(wù)注解使用方法,感興趣的朋友一起看看吧

@Scheduled 注解是 Spring 提供的一個(gè)注解式定時(shí)任務(wù)調(diào)度工具,用于簡(jiǎn)化定時(shí)任務(wù)的實(shí)現(xiàn)。它的默認(rèn)行為是單線程執(zhí)行,即任務(wù)默認(rèn)在同一個(gè)線程中依次執(zhí)行。如果任務(wù)拋出異?;驁?zhí)行時(shí)間過(guò)長(zhǎng),可能會(huì)影響后續(xù)任務(wù)的調(diào)度。

在 Spring 中,使用 @Scheduled 注解定義的多個(gè)定時(shí)任務(wù)默認(rèn)是單線程依次執(zhí)行的。這意味著,如果多個(gè)定時(shí)任務(wù)被觸發(fā)在同一時(shí)間執(zhí)行,它們會(huì)按照任務(wù)注冊(cè)的順序依次執(zhí)行,而不是并行執(zhí)行。

默認(rèn)行為

  • 單線程執(zhí)行:Spring 的 @Scheduled 注解默認(rèn)使用單線程調(diào)度器(SimpleScheduledExecutor),因此多個(gè)任務(wù)會(huì)串行執(zhí)行。
  • 任務(wù)阻塞:如果一個(gè)任務(wù)執(zhí)行時(shí)間過(guò)長(zhǎng),會(huì)阻塞后續(xù)任務(wù)的執(zhí)行。

如何實(shí)現(xiàn)并行執(zhí)行

如果需要多個(gè)定時(shí)任務(wù)并行執(zhí)行,可以通過(guò)以下方法實(shí)現(xiàn):

方法 1:配置多線程調(diào)度器

可以通過(guò)配置 ThreadPoolTaskScheduler 來(lái)為 @Scheduled 任務(wù)提供一個(gè)線程池,從而允許多個(gè)任務(wù)并行執(zhí)行。

示例代碼

@Configuration
public class ScheduleConfig {
    @Bean
    public ThreadPoolTaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(5); // 設(shè)置線程池大小
        scheduler.setThreadNamePrefix("my-scheduled-task-");
        return scheduler;
    }
}

@Scheduled 注解中指定使用自定義調(diào)度器:

@Scheduled(fixedRate = 5000, scheduler = "taskScheduler")
public void task1() {
    // 任務(wù)內(nèi)容
}

方法 2:使用 @Async注解

可以通過(guò)結(jié)合 @Async 注解和 @EnableAsync 注解,使每個(gè) @Scheduled 任務(wù)在獨(dú)立的線程中異步執(zhí)行。

示例代碼

@Configuration
@EnableAsync
public class AsyncConfig {
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(5); // 設(shè)置線程池大小
        return scheduler;
    }
}

在任務(wù)方法上添加 @Async 注解:

@Async
@Scheduled(fixedRate = 5000)
public void task1() {
    // 任務(wù)內(nèi)容
}

方法 3:通過(guò)配置文件設(shè)置線程池大小

在 Spring Boot 中,可以通過(guò)配置文件直接設(shè)置 spring.task.scheduling.pool.size 屬性來(lái)增加線程池大小。

示例配置

spring.task.scheduling.pool.size=5

總結(jié)

  • 默認(rèn)行為@Scheduled 注解默認(rèn)是單線程依次執(zhí)行。
  • 并行執(zhí)行:可以通過(guò)配置多線程調(diào)度器或使用 @Async 注解實(shí)現(xiàn)并行執(zhí)行。
  • 推薦方式:配置多線程調(diào)度器(ThreadPoolTaskScheduler)是最常用的方式,適合大多數(shù)場(chǎng)景。

通過(guò)以上方法,可以輕松實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)的并行執(zhí)行!

以下是 @Scheduled 注解的參數(shù)大全及其詳細(xì)說(shuō)明:

1. cron

  • 含義:指定一個(gè) cron 表達(dá)式,用于定義任務(wù)的執(zhí)行時(shí)間。
  • 格式:cron 表達(dá)式由 6 或 7 個(gè)字段組成,分別表示秒、分、小時(shí)、日、月、星期(和年)。
  • 示例
    • 每隔 5 秒執(zhí)行一次:0/5 * * * * *
    • 每天 23 點(diǎn)執(zhí)行一次:0 0 23 * * *
    • 每月 1 號(hào)凌晨 1 點(diǎn)執(zhí)行一次:0 0 1 1 * *

2. zone

  • 含義:指定時(shí)區(qū),用于解析 cron 表達(dá)式。
  • 類(lèi)型String,默認(rèn)值為空字符串,表示使用服務(wù)器的默認(rèn)時(shí)區(qū)。
  • 示例Asia/Shanghai

3. fixedRate

  • 含義:指定任務(wù)以固定的時(shí)間間隔執(zhí)行,單位為毫秒。
  • 類(lèi)型long,默認(rèn)值為 -1,表示不使用固定速率。
  • 示例@Scheduled(fixedRate = 5000) 表示每隔 5 秒執(zhí)行一次

4fixedRateString

  • 含義:與 fixedRate 類(lèi)似,但使用字符串類(lèi)型,支持占位符。
  • 類(lèi)型String,默認(rèn)值為空字符串。
  • 示例@Scheduled(fixedRateString = "5000") 表示每隔 5 秒執(zhí)行一次

5. fixedDelay

  • 含義:指定任務(wù)在上一次執(zhí)行結(jié)束后,經(jīng)過(guò)固定的時(shí)間間隔再執(zhí)行下一次,單位為毫秒。
  • 類(lèi)型long,默認(rèn)值為 -1,表示不使用固定延遲。
  • 示例@Scheduled(fixedDelay = 5000) 表示上一次任務(wù)執(zhí)行結(jié)束后,等待 5 秒再執(zhí)行下一次

6. fixedDelayString

含義:與 fixedDelay 類(lèi)似,但使用字符串類(lèi)型,支持占位符。

類(lèi)型String,默認(rèn)值為空字符串。

示例@Scheduled(fixedDelayString = "5000") 表示上一次任務(wù)執(zhí)行結(jié)束后,等待 5 秒再執(zhí)行下一次

7. initialDelay

  • 含義:指定任務(wù)首次執(zhí)行前的延遲時(shí)間,單位為毫秒。
  • 類(lèi)型long,默認(rèn)值為 -1,表示不使用初始延遲。
  • 示例@Scheduled(initialDelay = 5000, fixedRate = 10000) 表示首次延遲 5 秒后執(zhí)行,之后每隔 10 秒執(zhí)行一次

8. initialDelayString

  • 含義:與 initialDelay 類(lèi)似,但使用字符串類(lèi)型,支持占位符。
  • 類(lèi)型String,默認(rèn)值為空字符串。
  • 示例@Scheduled(initialDelayString = "5000", fixedRateString = "10000") 表示首次延遲 5 秒后執(zhí)行,之后每隔 10 秒執(zhí)行一次

9. CRON_DISABLED

  • 含義:一個(gè)特殊的 cron 表達(dá)式值,用于禁用定時(shí)任務(wù)。
  • "-",當(dāng) cron 表達(dá)式設(shè)置為 "-" 時(shí),任務(wù)將被禁用

總結(jié)

  • cron:適合復(fù)雜的定時(shí)任務(wù)調(diào)度,如按特定時(shí)間點(diǎn)執(zhí)行。
  • fixedRatefixedDelay:適合簡(jiǎn)單的定時(shí)任務(wù)調(diào)度,如每隔固定時(shí)間執(zhí)行。
  • initialDelay:用于控制任務(wù)的首次執(zhí)行時(shí)間。
  • zone:用于指定時(shí)區(qū),確保任務(wù)按正確的時(shí)區(qū)執(zhí)行。

通過(guò)合理使用這些參數(shù),可以靈活地配置定時(shí)任務(wù)的執(zhí)行計(jì)劃,滿(mǎn)足各種業(yè)務(wù)需求。

到此這篇關(guān)于spring @Scheduled定時(shí)任務(wù)注解使用方法以及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)spring @Scheduled定時(shí)任務(wù)注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Java編程中使用正則表達(dá)式

    在Java編程中使用正則表達(dá)式

    這篇文章主要介紹了在Java編程中使用正則表達(dá)式,注意使用matches()方法檢測(cè)一下Java對(duì)正則表達(dá)式的支持情況,需要的朋友可以參考下
    2015-08-08
  • JAVA異常處理機(jī)制之throws/throw使用情況

    JAVA異常處理機(jī)制之throws/throw使用情況

    這篇文章主要介紹了JAVA異常處理機(jī)制之throws/throw使用情況的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java中的Reference和引用類(lèi)型實(shí)例精講

    java中的Reference和引用類(lèi)型實(shí)例精講

    這篇文章主要為大家介紹了java中的Reference和引用類(lèi)型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java使用modbus4j實(shí)現(xiàn)modbus?tcp通訊

    Java使用modbus4j實(shí)現(xiàn)modbus?tcp通訊

    Modbus是由Modicon(現(xiàn)為施耐德電氣公司的一個(gè)品牌)在1979年發(fā)明的,是全球第一個(gè)真正用于工業(yè)現(xiàn)場(chǎng)的總線協(xié)議,本文主要介紹了java如何使用modbus4j實(shí)現(xiàn)modbus?tcp通訊,感興趣的可以了解下
    2023-12-12
  • 詳解Java HashMap實(shí)現(xiàn)原理

    詳解Java HashMap實(shí)現(xiàn)原理

    HashMap是基于哈希表的Map接口實(shí)現(xiàn),提供了所有可選的映射操作,并允許使用null值和null建,不同步且不保證映射順序。本文將記錄一下研究HashMap實(shí)現(xiàn)原理。
    2017-01-01
  • MybatisPlus中selectPage的使用方法

    MybatisPlus中selectPage的使用方法

    本文主要介紹了MybatisPlus中selectPage的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java List集合接口的介紹和使用全面教程

    java List集合接口的介紹和使用全面教程

    這篇文章主要為大家介紹了java List集合接口的介紹和使用全面教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Idea公司真牛逼發(fā)行最適合程序員編程字體

    Idea公司真牛逼發(fā)行最適合程序員編程字體

    JetBrains年初的時(shí)候推出了一種新字體,即JetBrains Mono,它是專(zhuān)為開(kāi)發(fā)人員設(shè)計(jì)的,非常不錯(cuò),喜歡的朋友快來(lái)體驗(yàn)吧
    2020-12-12
  • Java中UUID生成原理及優(yōu)缺點(diǎn)

    Java中UUID生成原理及優(yōu)缺點(diǎn)

    本文將詳細(xì)講解UUID的生成原理、特性、實(shí)用場(chǎng)景以及優(yōu)缺點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Springboot項(xiàng)目出現(xiàn)java.lang.ArrayStoreException的異常分析

    Springboot項(xiàng)目出現(xiàn)java.lang.ArrayStoreException的異常分析

    這篇文章介紹了Springboot項(xiàng)目出現(xiàn)java.lang.ArrayStoreException的異常分析,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評(píng)論

仁布县| 新邵县| 韩城市| 射阳县| 金沙县| 新密市| 徐汇区| 芒康县| 左云县| 乌恰县| 灵山县| 永新县| 五原县| 金堂县| 中超| 清苑县| 灵宝市| 称多县| 珠海市| 白银市| 抚州市| 丹棱县| 沛县| 丘北县| 和静县| 阿拉善右旗| 从化市| 陕西省| 牟定县| 商洛市| 泽州县| 闻喜县| 岢岚县| 叶城县| 河池市| 孝义市| 乳源| 巧家县| 夹江县| 曲麻莱县| 通海县|