在項目的開發過程當中,不免會碰見後須要後臺處理的任務,例如定時發送郵件通知、後臺處理耗時的數據處理等,這個時候你就須要Quartz.Net
了。服務器
Quartz.Net
是純淨的,它是一個.Net程序集,是很是流行的Java做業調度系統Quartz的C#實現。負載均衡
Quartz.Net
一款功能齊全的任務調度系統,從小型應用到大型企業級系統都能適用。功能齊全體如今觸發器的多樣性上面,即支持簡單的定時器,也支持Cron表達式;即能執行重複的做業任務,也支持指定例外的日曆;任務也能夠是多樣性的,只要繼承IJob接口便可。測試
對於小型應用,Quartz.Net
能夠集成到你的系統中,對於企業級系統,它提供了Routing支持,提供了Group來組織和管理任務,此外還有持久化、插件功能、負載均衡和故障遷移等知足不一樣應用場景的須要。ui
咱們使用的是當前最新版本2.4.0進行演示。(注意:高版本不適合當前教程)添加引用之後,來建立一個Job類spa
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.下面是我我的的一點擴展code
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服務器) blog