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-starter
和 spring-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透過封裝這些底層實現,為開發者提供了統一的介面和配置方式來處理定時任務。