Quartz.Net實現定時任務調度

justatest 8年前發布 | 40K 次閱讀 Quartz 作業調度框架 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
        {
            //工廠1

        ISchedulerFactory 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!