コード例 #1
0
        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);
            }
        }
コード例 #2
0
        /// <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);
            }
        }