public void Execute(IJobExecutionContext context) { //获得requestUrl和requestType JobDataMap dataMap = context.JobDetail.JobDataMap; string jobJson = dataMap.GetString("jobJson"); var result = JsonConvert.DeserializeObject <SchedulerRequest>(jobJson); try { var resultMsg = string.Empty; HttpClient client = new HttpClient(); //GET请求 if (result.RequestType == (int)JobEnum.RequestType.Get) { resultMsg = client.GetAsync(result.RequestUrl).Result.Content.ReadAsStringAsync().Result; } //POST请求 else if (result.RequestType == (int)JobEnum.RequestType.Post) { SchedulerRequest re = new SchedulerRequest(); var content = JsonConvert.SerializeObject(re); resultMsg = client.PostAsync(result.RequestUrl, new StringContent(content)).Result.Content.ReadAsStringAsync().Result; } //记录返回信息 LogWriter.info("ExecuteTime:" + DateTime.Now.ToString() + ";JobName" + result.JobName + ";" + resultMsg); //保存结果到数据库 if (resultMsg.ToUpper().Contains("SUCCESS")) { result.LogStatus = (int)JobEnum.LogStatus.SuccessInfo; result.ReturnMsg = "SUCCESS"; } else { result.LogStatus = (int)JobEnum.LogStatus.FailedInfo; result.ReturnMsg = "FAIL"; } SchedulerConfigQuery.InsertLog(result); } catch (Exception ex) { //设置将自动去除这个任务的触发器,所以这个任务不会再执行 //JobExecutionException ex_job = new JobExecutionException(ex); //ex_job.UnscheduleAllTriggers = true; //保存到数据库 var message = new LogMessage { MessageKey = "Job-Execute", MessageBody = result, Exception = ex.ToString() }; LogWriter.error("Execute-Exception:" + ex.ToString()); result.ReturnMsg = "Execute-Exception"; result.LogStatus = (int)JobEnum.LogStatus.ExceptInfo; SchedulerConfigQuery.InsertLog(result); } }
/// <summary> /// 执行Job方法 /// </summary> /// <param name="list"></param> /// <returns></returns> private bool ExecuteWebApi(SchedulerConfigModel list) { try { var flag = true; SchedulerHelper scheduler = new SchedulerHelper(); SchedulerRequest request = new SchedulerRequest(); request.JobName = list.JobName; request.JobGroup = list.JobGroup; request.TriggerName = list.JobName + "Trigger"; request.TriggerGroupName = list.JobGroup + "Trigger"; request.CronTab = list.CronTab; request.StartTime = list.StartTime; if (list.EndTime != null) { request.EndTime = list.EndTime; } else { request.EndTime = null; } request.RequestType = list.RequestType; request.RequestUrl = list.RequestUrl; var json = JsonConvert.SerializeObject(request); DateTimeOffset?end = null; if (request.EndTime != null) { end = DateTime.SpecifyKind(Convert.ToDateTime(request.EndTime), DateTimeKind.Local); if (request.EndTime < DateTime.Now) { flag = false; } } if (flag) { IJobDetail jobDetail = JobBuilder.Create <JobMethod>() .WithIdentity(request.JobName, request.JobGroup) .UsingJobData("jobJson", json) .Build(); CronTriggerImpl tigger = (CronTriggerImpl)TriggerBuilder.Create() .WithIdentity(request.TriggerName, request.TriggerGroupName) .WithCronSchedule(request.CronTab) .ForJob(request.JobName, request.JobGroup) .StartNow() .EndAt(end) .Build(); DateTimeOffset dt = scheduler.scheduleJob(jobDetail, tigger); LogWriter.info("[" + (request.RequestType == (int)JobEnum.RequestType.Get ? "GET" : "POST") + "]Job-" + request.JobName + "已启动,定时运行时间为:" + Convert.ToDateTime(dt.ToString()) + ",请求地址:" + request.RequestUrl); } else { LogWriter.info("[" + (request.RequestType == (int)JobEnum.RequestType.Get ? "GET" : "POST") + "]Job-" + request.JobName + ",当前时间超出此Job设置的执行结束时间,该Job已停止执行,请求地址:" + request.RequestUrl); } return(true); } catch (Exception ex) { LogWriter.error("Job-" + list.JobName + "执行异常,请求地址:" + list.RequestUrl + ",异常信息:" + ex.ToString()); //插入日志 SchedulerRequest request = new SchedulerRequest(); request.JobGroup = list.JobGroup; request.JobName = list.JobName; request.RequestType = list.RequestType; request.RequestUrl = list.RequestUrl; request.ReturnMsg = "Job-Exception: " + (ex.ToString().Length > 490 ? ex.ToString().Substring(0, 490) : ex.ToString()); request.LogStatus = (int)JobEnum.LogStatus.ExceptInfo; SchedulerConfigQuery.InsertLog(request); //数据状态更新为0,防止重复执行 SchedulerConfigQuery.UpdateStatus(list.ID); return(false); } }