Spring任務排程核心概念模型
阿新 • • 發佈:2020-09-20
關於任務排程,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
介面可以取消排程了的任務或者檢查該任務執行是否已經完成;
-
參考資料
-