Spring Scheduling

Annotation

  • @Scheduled : 用於在 Spring 中建立定時任務。
    • 屬性 (fields) :
      • cron : 使用 Cron 表達式定義執行頻率。
      • fixedDelay : 在上一次任務 結束 與下一次任務 開始 之間的固定延遲。參數: long (ms)
      • fixedDelayString : 與 fixedDelay 相同,但支援使用字串或 ${...} 配置。
      • fixedRate : 兩次任務 開始 之間的固定頻率。不等待上一次任務完成。
      • fixedRateString : 同上,字串配置。
      • initialDelay : 第一次任務執行前的延遲時間。
      • initialDelayString : 同上,字串配置。
      • timeUnit : 指定時間單位,預設為 ms (毫秒)。
      • zone : 指定時區 (Timezone)。

Cron 語法範例

  • 0 0 0 * * ? : 每天凌晨 0 點執行。
  • 0 0/5 * * * ? : 每隔 5 分鐘執行一次。
  • 0 0 12 ? * MON-FRI : 每個工作日的正午 12 點。

最佳實踐

  1. 異步執行: 預設情況下,@Scheduled 是在單一線程中執行的。若有多個任務,請配置 TaskScheduler 或使用 @Async
  2. 外部化配置: 推薦使用 ${property.name} 語法將 Cron 表達式提取至 application.yml 中。
  3. 異常處理: 定時任務中的異常如果不被捕捉,可能會導致後續執行中斷。