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

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

 更新時(shí)間:2025年02月08日 11:17:23   作者:angen2018  
Spring的@Scheduled注解用于定時(shí)任務(wù)調(diào)度,默認(rèn)單線程依次執(zhí)行,可以通過配置多線程調(diào)度器或使用@Async注解實(shí)現(xiàn)并行執(zhí)行,常見參數(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í)間過長,可能會(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í)間過長,會(huì)阻塞后續(xù)任務(wù)的執(zhí)行。

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

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

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

可以通過配置 ThreadPoolTaskScheduler 來為 @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注解

可以通過結(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:通過配置文件設(shè)置線程池大小

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

示例配置

spring.task.scheduling.pool.size=5

總結(jié)

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

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

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

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á)式。
  • 類型String,默認(rèn)值為空字符串,表示使用服務(wù)器的默認(rèn)時(shí)區(qū)。
  • 示例Asia/Shanghai

3. fixedRate

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

4fixedRateString

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

5. fixedDelay

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

6. fixedDelayString

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

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

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

7. initialDelay

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

8. initialDelayString

  • 含義:與 initialDelay 類似,但使用字符串類型,支持占位符。
  • 類型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í)行。

通過合理使用這些參數(shù),可以靈活地配置定時(shí)任務(wù)的執(zhí)行計(jì)劃,滿足各種業(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)文章

最新評(píng)論