Quartz.Net實現定時任務調度
來自: http://www.cnblogs.com/liuchang/p/5179996.html
Quartz.Net介紹:
Quartz一個開源的作業調度框架,OpenSymphony的開源項目。Quartz.Net 是Quartz的C#移植版本。
它一些很好的特性:
1:支持集群,作業分組,作業遠程管理。
2:自定義精細的時間觸發器,使用簡單,作業和觸發分離。
3:數據庫支持,可以寄宿Windows服務,WebSite,winform等。
基礎概念:
Scheduler 作業度器。
IJob 作業接口。 繼承并實現Execute, 編寫執行的具體作業邏輯。
JobBuilder 根據設置,生成一個詳細作業信息(JobDetail)。
TriggerBuilder 根據規則,生產對應的Trigger
應用:
1創建mvc項目,并通過nuget獲取Quartz的類庫
2封裝任務工廠
/// <summary> /// 任務工廠 /// </summary> /// <typeparam name="T">工作類</typeparam> /// <param name="DetailName">工作名稱</param> /// <param name="TriggerName">觸發器名稱</param> /// <param name="Minute">多長時間出發一次</param> private static void JobsFactory<T>(string DetailName, string TriggerName, int Minute) where T : IJob { //工廠1ISchedulerFactory factory = new StdSchedulerFactory(); //啟動 IScheduler scheduler = factory.GetScheduler(); scheduler.Start(); //描述工作 IJobDetail jobDetail = new JobDetailImpl(DetailName, null, typeof(T)); //觸發器 ISimpleTrigger trigger = new SimpleTriggerImpl(TriggerName, null, DateTime.Now, null, SimpleTriggerImpl.RepeatIndefinitely, TimeSpan.FromSeconds(Minute)); //執行 scheduler.ScheduleJob(jobDetail, trigger); }</pre>
3創建工作內容并實現Ijob的接口
public class CancleOrderJob : IJob { B_Order_ConfrimCancelInfoManager manager = new B_Order_ConfrimCancelInfoManager(); public void Execute(IJobExecutionContext context) { log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); var list = manager.GetAllHandleOrder(); if (list != null) { foreach (var item in list) { if (item.GHandleTime < DateTime.Now) { try { manager.UpdateStatus(item.ID); } catch (Exception e) { logger.Error(e.Message); throw; }} } } } }</pre>
在global中啟動任務:
protected void Application_Start() { AreaRegistration.RegisterAllAreas();WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //自動取消訂單 JobsFactory<CancleOrderJob>("CancleOrderDetial", "CancleOrderTrigger", 1000); //自動完成訂單 JobsFactory<CompleteOrderJob>("CompleteOrderDetial", "CompleteOrderTrigger", 1000); //加載日志的配置文件 log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config"))); }</pre>
注意:這里用到了log4.net記錄錯誤日志
log4.net記錄錯誤日志的使用方法:
1應用log4.net的類庫
2編寫配置文件
<configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections><log4net debug="true"> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="log//error_"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="10"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyy-MM-dd".log""/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d - %m%n"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="RollingLogFileAppender"/> </root>3在global中讀取配置文件的信息
//加載日志的配置文件 log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config")));4使用:
log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); logger.Error(e.Message);</div>
本文由用戶 justatest 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!