1. 程式人生 > 實用技巧 >Spring任務排程核心概念模型

Spring任務排程核心概念模型

關於任務排程,Spring有如下幾個核心概念 :

  • Task– 任務
    • 用於表示一個有待執行的任務;
    • 該任務有可能需要被執行一次;
      • 在特定的時間點執行一次;
      • 或者在某個時間點之後再延時特定的時間段之後執行一次;
    • 也有可能需要被反覆執行多次;
      • 在特定時間點之後間隔特定的時間段重複執行;
      • 或者在cron表示式指定的執行時機重複執行;
    • Spring不存在針對任務對應的介面/類抽象,Spring中一個任務具體以一個Runnable介面實現類物件的方式存在;
  • TaskExecutor– 任務執行器
    • 表示執行任務(Task)的執行緒或者執行緒池;
    • 並不要求一定是執行緒池,可以是單個執行緒;
    • 並不要求一定是非同步執行任務,也可以是同步執行任務;
    • Spring存在一個介面TaskExecutor用於抽象該任務執行器概念;
    • Spring提供若干個內建TaskExecutor實現類,常見的如下 :
      • SyncTaskExecutor– 在呼叫者執行緒內同步執行任務;
      • SimpleAsyncTaskExecutor– 不重用執行緒,新建執行緒執行任務;
      • ThreadPoolTaskExecutor– 最常用的基於執行緒池的任務執行器;
  • TaskScheduler– 任務執行排程器
    • 排程任務執行的工具

    • Spring中存在介面TaskScheduler抽象建模該概念

    • 能夠按以下幾種方式排程任務的執行

      • 在特定的時間點執行一次
        • ScheduledFuture schedule(Runnable task, <指定時間點>)
      • 以固定頻率重複執行
        • ScheduledFuture scheduleAtFixedRate(Runnable task, <指定時間週期>)
        • ScheduledFuture scheduleAtFixedRate(Runnable task, <指定在該時間點之後重複執行> ,<指定時間週期>)
      • 延時執行一次
        • ScheduledFuture scheduleWithFixedDelay(Runnable task, <指定延時時間段>)
        • ScheduledFuture scheduleWithFixedDelay(Runnable task, <指定從該時間點之後開始延時> ,<指定延時時間段>)
      • 使用Trigger任務執行觸發器 – 可定製,最靈活的一種任務執行觸發機制;
        • ScheduledFuture schedule(Runnable task, Trigger trigger)
        • Spring提供Trigger介面用於建模任務觸發器這一概念
        • Spring內建提供的Trigger實現有 :
          • CronTrigger– 基於cron表示式的任務執行觸發器
          • PeriodicTrigger– 建立延時執行一次或者固定週期執行多次的任務觸發器
    • ScheduledFuture– 被排程了的任務執行

      • Spring使用ScheduledFuture介面抽象表示概念"被排程了的任務",該任務會在將來某個時刻被執行;
      • Spring通過ScheduledFuture介面可以取消排程了的任務或者檢查該任務執行是否已經完成;
    • 參考資料