Пример #1
0
        public void Execute(IJobExecutionContext context)
        {
            //获得requestUrl和requestType
            JobDataMap dataMap = context.JobDetail.JobDataMap;
            string     jobJson = dataMap.GetString("jobJson");

            writeLog($"jobJson:{ jobJson}");
            var result = JsonConvert.DeserializeObject <SchedulerRequest>(jobJson);

            try
            {
                writeLog($"jobJson:{ result.RequestUrl}", "1");
                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;
                    writeLog($"GET请求resultMsg:{ resultMsg}");
                }
                //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;
                    writeLog($"POST请求resultMsg:{ resultMsg}");
                }
                //保存结果到数据库
                if (resultMsg.ToUpper().Contains("SUCCESS"))
                {
                    result.LogStatus = (int)JobEnum.LogStatus.SuccessInfo;
                }
                else
                {
                    result.LogStatus = (int)JobEnum.LogStatus.FailedInfo;
                }
                result.ReturnMsg = resultMsg.Length > 800 ? resultMsg.Substring(0, 800) : resultMsg;
                SchedulerConfigDB.InsertLog(result);
            }
            catch (Exception ex)
            {
                //设置将自动去除这个任务的触发器,所以这个任务不会再执行
                //JobExecutionException ex_job = new JobExecutionException(ex);
                //ex_job.UnscheduleAllTriggers = true;
                //保存到数据库
                result.ReturnMsg = "IJob-Exception: " + (ex.ToString().Length > 450 ? ex.ToString().Substring(0, 450) : ex.ToString());
                result.LogStatus = (int)JobEnum.LogStatus.ExceptInfo;
                SchedulerConfigDB.InsertLog(result);
            }
        }
Пример #2
0
      public void TimedExecuteJob(object source, System.Timers.ElapsedEventArgs e)
      {
          try
          {
              SchedulerHelper op = new SchedulerHelper();
              //查询变动的数据
              List <SchedulerConfigModel> list = SchedulerConfigDB.GetSchedulerRecord((int)JobEnum.DataType.UpdateData);

              if (list != null && list.Count > 0)
              {
                  for (var i = 0; i < list.Count; i++)
                  {
                      //新增|更新
                      if (list[i].Status == (int)JobEnum.DataState.Insert || list[i].Status == (int)JobEnum.DataState.Update)
                      {
                          //判断Job是否存在,存在并删除
                          var _delete = op.IsExistsDelJob(list[i].JobName, list[i].JobGroup);
                          if (_delete)
                          {
                              //启用新的Job
                              var _update = ExecuteWebApi(list[i]);
                              if (_update)
                              {
                                  //将数据状态更新为0
                                  SchedulerConfigDB.UpdateStatus(list[i].ID);
                              }
                          }
                      }
                      //禁用Job
                      else if (list[i].Status == (int)JobEnum.DataState.Delete)
                      {
                          //判断Job是否存在,存在并删除
                          var _delete = op.IsExistsDelJob(list[i].JobName, list[i].JobGroup);

                          if (_delete)
                          {
                              //将数据状态更新为0
                              SchedulerConfigDB.UpdateStatus(list[i].ID);
                          }
                      }
                  }
              }
          }
          catch (Exception ex)
          {
          }
      }
Пример #3
0
 //string filePath = @"D:\软件测试\jobtest.txt";
 protected override void OnStart(string[] args)
 {
     try
     {
         List <SchedulerConfigModel> list = SchedulerConfigDB.GetSchedulerRecord((int)JobEnum.DataType.EnableData);
         if (list != null && list.Count > 0)
         {
             for (var i = 0; i < list.Count; i++)
             {
                 ExecuteWebApi(list[i]);
             }
         }
     }
     catch (Exception ex)
     {
     }
 }
Пример #4
0
      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 <FileJob>()
                                         .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);
              }
              else
              {
              }

              return(true);
          }
          catch (Exception ex)
          {
              //插入日志
              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 > 450 ? ex.ToString().Substring(0, 450) : ex.ToString());
              request.LogStatus   = (int)JobEnum.LogStatus.ExceptInfo;
              SchedulerConfigDB.InsertLog(request);
              //数据状态更新为0,防止重复执行
              SchedulerConfigDB.UpdateStatus(list.ID);
              return(false);
          }
      }
Пример #5
0
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        static void Main()
        {
            //ServiceBase[] ServicesToRun;
            //ServicesToRun = new ServiceBase[]
            //{
            //    new JobManager()
            //};
            //ServiceBase.Run(ServicesToRun);

            //test Code
            //FileJob job = new FileJob();
            //job.Execute(null);

            #region
            List <SchedulerConfigModel> list1 = SchedulerConfigDB.GetSchedulerRecord((int)JobEnum.DataType.UpdateData);
            if (list1.Count > 0)
            {
                for (int i = 0; i < list1.Count; i++)
                {
                    var              list      = list1[i];
                    SchedulerHelper  scheduler = new SchedulerHelper();
                    var              flag      = true;
                    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);
                    scheduler.IsExistsDelJob(request.JobName, request.JobGroup);
                    if (flag)
                    {
                        IJobDetail jobDetail = JobBuilder.Create <FileJob>()
                                               .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()
                                                 .Build();

                        DateTimeOffset dt = scheduler.scheduleJob(jobDetail, tigger);
                    }
                }
            }
            #endregion
        }