Quartz.NET学习系列(五)--- 失败恢复和异常处理

        Quartz.NET为了提高程序的容错性,加入了失败恢复和异常处理的机制。

失败恢复

        失败恢复是Quartz.NET触发器的方法,用于指示失败之后的操作

 ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
                                           .WithIdentity("trigger2", "group1")
                                           .StartAt(startTime)
                                           .WithSimpleSchedule(x => x
                                           .WithIntervalInSeconds(3)
                                           .RepeatForever()
                                           .WithMisfireHandlingInstructionNowWithExistingCount()) //设置失败后操作
还有的操作有

Quartz.NET学习系列(五)--- 失败恢复和异常处理_第1张图片


异常处理

       JobExecutionException 是主要捕获错误时操作错误的类,其中RefireImmediately=true表示出错后马上恢复执行,UnscheduleAllTriggers=true表示出错后暂停所有触发器。

具体代码如下(出错之后马上恢复):

        public class BadJob1 : IJob
	{
		private  ILog log = LogManager.GetLogger(typeof(BadJob1));
		
		public virtual void Execute(IJobExecutionContext context)
		{
			JobKey jobKey = context.JobDetail.Key;
                        JobDataMap dataMap = context.JobDetail.JobDataMap;

                        int denominator = dataMap.GetInt("denominator");
                        log.InfoFormat("{0} 被除数 {1}", "---" + jobKey + " 执行时间 " + DateTime.Now, denominator);

			try
			{
                               int calculation = 4815 / denominator;
			}
			catch (Exception e)
			{
				log.Info("--- Error 错误");
				JobExecutionException e2 = new JobExecutionException(e);

                                dataMap.Put("denominator", "1");

				e2.RefireImmediately = true;
				throw e2;
			}
			
			log.InfoFormat("---{0} 执行完成 {1}", jobKey, DateTime.Now.ToString());
		}

	}

任务和触发器的定义以及计划的执行和上篇类似,此处就不在贴代码

你可能感兴趣的:(Quartz.net学习)