Spring Schedule定時任務看這一篇就夠了

H_Q發表於2024-03-15

Spring Schedule 是指Spring框架提供的定時任務排程功能。Spring Schedule允許開發者在應用程式中便捷地建立和管理定時任務,比如按固定頻率執行某些操作,或者按照cron表示式設定複雜的排程規則。

Spring Schedule 功能的依賴直接或間接地包含在 spring-boot-starter 家族中的相關起步依賴模組中,特別是對於定時任務的支援,Spring Boot 預設並未在基礎的 spring-boot-starter 中直接提供,而是包含在 spring-boot-starter-web 或者 spring-boot-starter-data-jpa 等起步依賴中並不是必需的。然而,為了支援定時任務,你需要引入 spring-boot-starter-quartz(如果打算使用Quartz作為定時任務排程器)或者只需要 spring-boot-starterspring-boot-starter-data-solr(內含對Scheduled任務的支援)。

SpringBoot使用Spring Schedule不用額外的引入其他依賴只要有依賴就可以了

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

Spring Schedule核心概念與使用

1. Cron表示式

Cron表示式是用於配置定時任務執行時間的一種格式,它通常包含以下七個欄位(部分欄位非必填):

秒(Seconds)

分鐘(Minutes)

小時(Hours)

月份中的日期(Day-of-Month)

月份(Month)

星期中的哪一天(Day-of-Week)

年份(Year)(這個欄位在大部分場景下是可選的,Spring Schedule預設不使用)

示例:0 0 0 * * MON-FRI 表示每週一到週五的每天凌晨0點執行。

Cron表示式線上工具:https://www.pppet.net/

2. 使用@EnableScheduling

要在Spring Boot應用中啟用定時任務排程功能,需要在某個配置類或@SpringBootApplication標記的啟動類上新增@EnableScheduling註解,這樣Spring容器就會啟動一個後臺排程器來檢測並執行帶有@Scheduled註解的方法。

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }
}

3. @Scheduled註解

@Scheduled 註解用於標記需要被排程執行的方法,它可以有多個屬性來指定排程策略,如cron表示式、fixedDelay(兩次執行之間的間隔時間)或fixedRate(兩次執行開始之間的間隔時間)等。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MyTask {

    @Scheduled(cron = "0 0/15 * * * ?")
    public void executeEveryQuarterHour() {
        // 每15分鐘執行一次的方法體
    }
}

4. 排程器實現

Spring Schedule背後支援多種任務排程方案,如JDK Timer、concurrent包下的ScheduledExecutorService以及Quartz等。Spring透過封裝這些底層實現,為開發者提供了統一的介面和配置方式來處理定時任務。

相關文章