目錄:
1.quartz.net任務調度:源碼及使用文檔
2.quartz.net插件類庫封裝
前言
前段時間把自己封裝quartz.net 類庫的過程總結到博客園,有網友想要看一下源碼,所以就把源碼傳到github上去了,今天把地址分享給大家,程序中單元測試,寫的太丑,所以就沒網上傳,故此我把使用文檔在這也分享給大家一下,有什么問題,請點擊我園子中的qq與我聯系。
源碼地址:https://github.com/kmonkey9006/Quatrz.Task
目的:
方便任務調度 的創建,刪除,暫停與繼續操作;提高任務在系統的可維護性與可擴展性。
使用流程:
1.web.config設置時間間隔與開始時間(便於維護)
<!--自動任務執行時間間隔(秒)by wyl--> <add key="ReDoPaySchedulerTimeBySeconds" value="86400" /> <!--自動任務執行 by wyl--> <add key="ReDoPaySchedulerStartTime" value="3:10"/>
2.在使用處調用類庫方法:
2.1獲取任務調度執行時間間隔與開始執行時間(這些值可以在代碼中直接賦值)
static int times = Convert.ToInt32(Synjones.Common.Config.Config.AppSettings("ReDoPaySchedulerTimeBySeconds")); static DateTime startTime = Convert.ToDateTime(Synjones.Common.Config.Config.AppSettings("ReDoPaySchedulerStartTime")).AddDays(1);
2.2創建任務調度
new QJob("standardsd", "jobid", "輪詢繳費", "XX").Handle(DoRePay).Start(startTime, times, 0);
注:standardsd:系統編碼(syscode)
Jobid:任務id(jobid)
輪詢繳費:任務名稱(name)
山東大學:任務群組名稱(group)
DoRePay:任務調度觸發動作。(action)
startTime:任務開始時間(starttime)
times:任務間隔時間(internaltimes)
0:最大執行次數(0表示無限次)(maxtimes)
3.在不停止服務端的情況下暫停與繼續任務
修改任務持久化文件,默認地址為~/Files/jobs/
當State為Working時表示任務正常執行
當State為Pending/Empty時表示任務正常執行(注意大小寫,寫錯則按Working執行)
調用說明:
調用說明 |
|
對象初始化 |
New QJob(string syscode, string id, string name = "", string group = "") |
參數說明 |
Syscode:系統編碼 Id:jobid Name:任務名稱 Group:任務群組
|
其他說明 |
Syscode+jobid:標志者任務的唯一性 Name,group:可為空但建議寫上,以便於更容易操作任務持久化文件 StartTime:開始時間默認為 DateTime.Now.AddMinutes(1) Maxtimes:最大執行次數默認為0 Internaltimes:時間間隔默認為1個小時 |
持久化文件存放地址賦值 |
JobFactory.Instance.SetPath(string path)
|
參數說明 |
文件路徑必須以@“\”結尾,不進行賦值默認地址為~\File\jobs\ |
任務觸發動作 |
Handle(Action handler)和Handle(Action<IQJob> handler) |
參數說明 |
兩者參數的卻別在於一個有回調參數(IQJOB),一個沒有參數 |
創建任務(1) |
Start(DateTime starttime, int internaltimes , int maxtimes) |
參數說明 |
Starttime:開始時間 internaltimes :任務執行間隔 maxtimes :最大執行次數
|
創建任務(2) |
Start() |
參數說明 |
直接執行創建job任務調度 |
移除任務 |
IQJob.Remove() |
說明 |
根據IQJob進行刪除(syscoed與jobid確定其唯一性) |
暫停任務 |
IQJob.Pause() |
說明 |
根據IQJob進行暫停(syscoed與jobid確定其唯一性) |
繼續任務 |
IQJob.Resume() |
說明 |
根據IQJob進行Resume(syscoed與jobid確定其唯一性) |
修改任務觸發動作 |
JobFactory.Instance.Trigger(string system_code, Action action) JobFactory.Instance.Trigger(string system_code, Action<IQJob> action) |
參數說明 |
system_code:系統編碼 Action:觸發動作 |
持久化操作 |
JobFactory.Instance.Initialize(); |
說明 |
獲取持久化文件,進行反序列化,然后把對象進行任務調度創建。 |
注意:
(1)系統編碼和任務id組合必須唯一。
(2)開始執行時間最好在系統操作不頻繁時間段(在服務平台和山東大學我用的是3:10)
(3)創建任務調度時,如果當前時間大於開始時間,任務在沒創建之前就會事先執行一次。所以希望在創建任務的時候開始時間不要用datetime.now。用指定時間或者用DateTime.Now.AddMinutes(1)
(4)基於(3)的說明,開始時間如果指定為2016-06-06 3:10 ,當在這時間之后如果服務器down掉,重新啟動系統時,不管是不是在3:10之后,系統均會執行一次
案例:
(1) new QJob("syscode", "jobid", "name", "group").Handle(job_handler).Start(DateTime.Now.AddSeconds(30), 2, 10); (2) new QJob("syscode", "jobid", "name", "group").Handle(job_detail_handler).Start(); (3) new QJob("syscode", "jobid", "name", "group").Remove(); (4) new QJob("syscode", "jobid").Remove(); (5) new QJob("syscode", "jobid", "name", "group").Pause(); (6) new QJob("syscode", "jobid").Pause(); (7) new QJob("syscode", "jobid", "name", "group").Resume(); (8) new QJob("syscode", "jobid").Resume();