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

spring @Scheduled定時任務注解使用方法及注意事項小結

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

@Scheduled 注解是 Spring 提供的一個注解式定時任務調度工具,用于簡化定時任務的實現。它的默認行為是單線程執(zhí)行,即任務默認在同一個線程中依次執(zhí)行。如果任務拋出異?;驁?zhí)行時間過長,可能會影響后續(xù)任務的調度。

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

默認行為

  • 單線程執(zhí)行:Spring 的 @Scheduled 注解默認使用單線程調度器(SimpleScheduledExecutor),因此多個任務會串行執(zhí)行。
  • 任務阻塞:如果一個任務執(zhí)行時間過長,會阻塞后續(xù)任務的執(zhí)行。

如何實現并行執(zhí)行

如果需要多個定時任務并行執(zhí)行,可以通過以下方法實現:

方法 1:配置多線程調度器

可以通過配置 ThreadPoolTaskScheduler 來為 @Scheduled 任務提供一個線程池,從而允許多個任務并行執(zhí)行。

示例代碼

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

@Scheduled 注解中指定使用自定義調度器:

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

方法 2:使用 @Async注解

可以通過結合 @Async 注解和 @EnableAsync 注解,使每個 @Scheduled 任務在獨立的線程中異步執(zhí)行。

示例代碼

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

在任務方法上添加 @Async 注解:

@Async
@Scheduled(fixedRate = 5000)
public void task1() {
    // 任務內容
}

方法 3:通過配置文件設置線程池大小

在 Spring Boot 中,可以通過配置文件直接設置 spring.task.scheduling.pool.size 屬性來增加線程池大小。

示例配置

spring.task.scheduling.pool.size=5

總結

  • 默認行為@Scheduled 注解默認是單線程依次執(zhí)行。
  • 并行執(zhí)行:可以通過配置多線程調度器或使用 @Async 注解實現并行執(zhí)行。
  • 推薦方式:配置多線程調度器(ThreadPoolTaskScheduler)是最常用的方式,適合大多數場景。

通過以上方法,可以輕松實現多個定時任務的并行執(zhí)行!

以下是 @Scheduled 注解的參數大全及其詳細說明:

1. cron

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

2. zone

  • 含義:指定時區(qū),用于解析 cron 表達式。
  • 類型String,默認值為空字符串,表示使用服務器的默認時區(qū)。
  • 示例Asia/Shanghai

3. fixedRate

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

4fixedRateString

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

5. fixedDelay

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

6. fixedDelayString

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

類型String,默認值為空字符串。

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

7. initialDelay

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

8. initialDelayString

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

9. CRON_DISABLED

  • 含義:一個特殊的 cron 表達式值,用于禁用定時任務。
  • "-",當 cron 表達式設置為 "-" 時,任務將被禁用

總結

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

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

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

相關文章

  • java讀寫ini文件、FileOutputStream問題

    java讀寫ini文件、FileOutputStream問題

    這篇文章主要介紹了java讀寫ini文件、FileOutputStream問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Mybatis的@select和@SelectProvider注解方式動態(tài)SQL語句解讀

    Mybatis的@select和@SelectProvider注解方式動態(tài)SQL語句解讀

    這篇文章主要介紹了Mybatis的@select和@SelectProvider注解方式動態(tài)SQL語句,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Maven版本沖突的三種解決方法

    Maven版本沖突的三種解決方法

    在Maven項目中,依賴傳遞可能導致Jar包版本沖突,常見的解決策略包括依賴排除、版本鎖定和使用maven-shade-plugin插件,本文就來介紹一下這三種解決方法,感興趣的可以了解一下
    2024-10-10
  • SpringBoot文件上傳功能的實現方法

    SpringBoot文件上傳功能的實現方法

    這篇文章主要介紹了SpringBoot文件上傳功能的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Java實戰(zhàn)之仿天貓商城系統的實現

    Java實戰(zhàn)之仿天貓商城系統的實現

    這篇文章主要介紹了如何利用Java制作一個基于SSM框架的迷你天貓商城系統,文中采用的技術有JSP、Springboot、SpringMVC、Spring等,需要的可以參考一下
    2022-03-03
  • SpringBoot?將配置文件掛到?jar?包外面的操作方法

    SpringBoot?將配置文件掛到?jar?包外面的操作方法

    在 SpringBoot 中,可以將配置文件放在 jar 包外面,這樣可以方便地修改配置而不需要重新打包和部署,這篇文章主要介紹了SpringBoot?如何將配置文件掛到?jar?包外面,需要的朋友可以參考下
    2023-03-03
  • JAVA發(fā)送HTTP請求,返回HTTP響應內容,應用及實例代碼

    JAVA發(fā)送HTTP請求,返回HTTP響應內容,應用及實例代碼

    這篇文章主要介紹了JAVA發(fā)送HTTP請求,返回HTTP響應內容,應用及實例代碼,需要的朋友可以參考下
    2014-02-02
  • 為什么不建議使用Java自定義Object作為HashMap的key

    為什么不建議使用Java自定義Object作為HashMap的key

    這篇文章主要介紹了為什么不建議使用Java自定義Object作為HashMap的key,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Java中List集合去重方法以及效率對比

    Java中List集合去重方法以及效率對比

    這篇文章主要給大家介紹了關于Java中List集合去重方法以及效率對比的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 詳解SpringBoot開發(fā)使用@ImportResource注解影響攔截器

    詳解SpringBoot開發(fā)使用@ImportResource注解影響攔截器

    這篇文章主要介紹了詳解SpringBoot開發(fā)使用@ImportResource注解影響攔截器,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11

最新評論