一直以為實現一個類型Windows的任務計劃的數據庫設計(計劃調度部分不考慮具體的任務步驟執行),最近認真的看了下每個配置才發現其實也不難,關鍵是搞清楚不管任務計劃怎么個配置(按天,按周,按月),對任務調度進程來說只要知道當前時間點應該執行那些任務就好了,即任務調度進程發現某一任務的“下次執行時間”小于等于當前時間時,則執行之,并且將任務的上次執行時間更新為當前時間,并且根據任務調度配置計算出下次任務的執行時間并更新任務記錄。
數據庫表結構,一次性任務不需要具體的配置信息表,通過[任務調度].[調度類型]來區別具體的調度規則
規則1.一個任務會有多個調度規則,下一執行時間是計算一遍所有調度規則后,獲取一個離當前時間最近并且大于當前時間的時間點作為下一執行時間
添加,修改,刪除某個調度規則后需要根據當前任務是否運行過來計算出下一運行時間,如果是已經運行過的任務(上一執行時間不為空),那么按規則1,如果是未運行過的任務,那么下一執行時間按所有調度規則配置的第一次執行時間中離當前時間最近并且大于當前時間的時間點作為下一執行時間
按策略模式來計算不同調度規則的下一執行時間