Quartz.Net使用教程 在項目的開發過程中,難免會遇見後需要後臺處理的任務,例如定時發送郵件通知、後臺處理耗時的數據處理等,這個時候你就需要Quartz.Net了。 Quartz.Net是純凈的,它是一個.Net程式集,是非常流行的Java作業調度系統Quartz的C#實現。 Quartz.N ...
Quartz.Net使用教程
在項目的開發過程中,難免會遇見後需要後臺處理的任務,例如定時發送郵件通知、後臺處理耗時的數據處理等,這個時候你就需要Quartz.Net
了。
Quartz.Net
是純凈的,它是一個.Net程式集,是非常流行的Java作業調度系統Quartz的C#實現。
Quartz.Net
一款功能齊全的任務調度系統,從小型應用到大型企業級系統都能適用。功能齊全體現在觸發器的多樣性上面,即支持簡單的定時器,也支持Cron表達式;即能執行重覆的作業任務,也支持指定例外的日曆;任務也可以是多樣性的,只要繼承IJob介面即可。
對於小型應用,Quartz.Net
可以集成到你的系統中,對於企業級系統,它提供了Routing支持,提供了Group來組織和管理任務,此外還有持久化、插件功能、負載均衡和故障遷移等滿足不同應用場景的需要。
我們使用的是當前最新版本2.4.0進行演示。(註意:高版本不適合當前教程)添加引用以後,來創建一個Job類
1 static void Main(string[] args) 2 { 3 //1.首先創建一個作業調度池 4 ISchedulerFactory schedf = new StdSchedulerFactory(); 5 //2.實例化調度器工廠 6 ISchedulerFactory schedulefactory = new StdSchedulerFactory(); 7 //3.實例化調度器 8 IScheduler scheduler = schedulefactory.GetScheduler(); 9 10 //4.創建一個作業 11 IJobDetail job1 = JobBuilder.Create<Class1>() 12 .WithIdentity("demojob1", "groupa") 13 .Build(); 14 15 //5.1:第一種方法直接寫死多少秒執行一次 16 //ITrigger trigger1 = TriggerBuilder.Create()//創建一個觸發器 17 // .WithIdentity("demotrigger1", "groupa") 18 // .StartNow() 19 // .WithSimpleSchedule(b => b.WithIntervalInSeconds(5)//5秒執行一次 20 // .RepeatForever())//無限迴圈執行 21 // .Build(); 22 23 //5.2推薦:第二種使用cron表達式 24 //線上生成cron表達式: http://cron.qqe2.com/ 25 string corn = "*/10 * * * * ?"; 26 ITrigger trigger1 = TriggerBuilder.Create() 27 .WithIdentity("demotrigger1", "groupa") 28 .WithCronSchedule(corn)//每一小時執行一次 29 .Build(); 30 31 //6.添加參數(鍵值對),如果不需要傳參則忽略這一步 32 //方法內獲取你傳的參數: string Name = context.Trigger.JobDataMap.GetString("Name"); 33 trigger1.JobDataMap.Add("Name", "劉玄德"); 34 35 //7.把作業,觸發器加入調度器 36 scheduler.ScheduleJob(job1, trigger1); 37 //8.開始運行 38 scheduler.Start(); 39 }
以上就是最簡單的Quartz的使用事例
2.下麵是我個人的一點擴展
1 Type type = Type.GetType("test1.TestCase");//獲取類 ""里為 命名空間.類名 2 Object obj = Activator.CreateInstance(type);//這裡創建 3 //4.創建一個作業 4 IJobDetail job2 = JobBuilder.Create(obj.GetType()) 5 .WithIdentity("demojob1", "groupa") 6 .Build();
7 //適合已經存在的方法動態添加定時任務
1 //適合在不改變代碼的情況下,動態添加要定時執行的方法(前面是文件物理地址(可以使用映射將虛擬地址轉換成物理地址) ,後面是命名空間加類名) 2 object obj = Assembly.LoadFile(@"D:\普通文件袋\測試\ClassLibrary2\bin\Debug\ClassLibrary2.dll").CreateInstance("ClassLibrary2.Class2"); 3 //4.創建一個作業 4 IJobDetail job2 = JobBuilder.Create(obj.GetType()) 5 .WithIdentity("demojob1", "groupa") 6 .Build();
3.Quartz.NET 部署在IIS上,防止被動態回收(個人建議不要使用IIs伺服器)