public void Start() { Console.WriteLine("Starting scheduler..."); var scheduler = schedulerFactory.GetScheduler(); // define the job and ask it to run var map = new JobDataMap(); map.Put("msg", "Some message!"); var job = JobBuilder.Create <HelloJob>() .WithIdentity("localJob", "default") .UsingJobData(map).RequestRecovery(true).Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("remotelyAddedTrigger", "default") .WithCronSchedule("/5 * * ? * *") .StartAt(DateTimeOffset.UtcNow) .ForJob(job) .Build(); if (!scheduler.CheckExists(job.Key)) { scheduler.ScheduleJob(job, trigger); } scheduler.Start(); }
private void SetWorkerState(bool start) { if (Jobs != null && Jobs.Count > 0) { foreach (JobBase job in Jobs) { try { if (start) { IJobDetail jobDetail = JobBuilder.Create(job.GetType()) .WithIdentity($"job_{job.GetType().ToString()}") .Build(); ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity($"trigger_{job.GetType().ToString()}") .WithCronSchedule(job.CronSchedule) .Build(); scheduler.ScheduleJob(jobDetail, cronTrigger).Wait(); Log.Current.Information("JobsManager", job.GetType().ToString() + " is started."); } else { Log.Current.Information("JobsManager", job.GetType().ToString() + " is stop."); } } catch (Exception ex) { Log.Current.Error("JobsManager", ex.ToString()); } } } }
private static void CodeMethod() { Console.WriteLine(DateTime.Now.ToString()); //1.首先创建一个作业调度池 ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); var scheduler = schedulerFactory.GetScheduler(); //2.创建出来一个具体的作业 IJobDetail job = JobBuilder.Create <JobDemo>().Build(); //3.创建并配置一个触发器 #region 每隔5秒执行一次Execute方法,无休止 //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(int.MaxValue)).Build(); #endregion #region 序每5秒执行一次,一共执行50次,开始执行时间设定在当前时间,结束时间我设定在1小时后,不管50次有没有执行完,1小时后,程序都不再继续执行 DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2); DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddHours(1), 5); //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime) // .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(50)) // .Build(); #endregion #region 实现各种时间纬度的调用(使用cron-like):在每小时的第10,20,30分钟,每分钟的第11,27秒执行一次 ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime).WithCronSchedule("11,27 10,20,30 * * * ? ").Build(); #endregion //4.加入作业调度池中 scheduler.ScheduleJob(job, trigger); //5.开始运行 scheduler.Start(); Console.ReadKey(); }
/// <summary> /// 添加任务计划 /// </summary> /// <returns></returns> private async Task AddScheduleJob(List <OpenJobEntity> entityList) { try { foreach (OpenJobEntity entity in entityList) { entity.F_StarRunTime = DateTime.Now; entity.F_EndRunTime = DateTime.Now.AddSeconds(-1); DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(entity.F_StarRunTime, 1); DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(DateTime.MaxValue.AddDays(-1), 1); await _service.SubmitForm(entity, entity.F_Id); IJobDetail job = JobBuilder.Create <JobExecute>().WithIdentity(entity.F_JobName, entity.F_JobGroup).Build(); job.JobDataMap.Add("F_Id", entity.F_Id); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .StartAt(starRunTime) .EndAt(endRunTime) .WithIdentity(entity.F_JobName, entity.F_JobGroup) .WithCronSchedule(entity.F_CronExpress) .Build(); await _scheduler.ScheduleJob(job, trigger); } } catch (Exception ex) { LogHelper.WriteWithTime(ex); } }
public void scheduler(Action act, string cron) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown try { JobDataMap val = new JobDataMap(); ((DirtyFlagMap <string, object>)(object) val).Add(RunnableJob.TASK_KEY, (object)act); string text = "job_" + Conversions.ToString(NextId()); JobKey val2 = new JobKey(text); JobDetailImpl val3 = (JobDetailImpl)JobBuilder.Create(typeof(RunnableJob)).UsingJobData(val).WithIdentity(val2) .Build(); CronScheduleBuilder val4 = CronScheduleBuilder.CronSchedule(cron); ICronTrigger val5 = (ICronTrigger)TriggerBuilder.Create().WithSchedule((IScheduleBuilder)(object)val4).Build(); _scheduler.ScheduleJob((IJobDetail)(object)val3, (ITrigger)(object)val5); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; log.Error((object)ex2); ProjectData.ClearProjectError(); } }
/// <summary> /// 用触发器来创建任务 /// </summary> public static void TriggerRun() { _log.Info("正在初始化工作任务"); IJobDetail job = JobBuilder.Create <SimpleJob>() .WithIdentity("job", "group") .Build(); //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() // .WithIdentity("trigger", "group") // .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).WithMisfireHandlingInstructionIgnoreMisfires().RepeatForever()) // .Build(); _log.Info("正在设置触发器"); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger", "group") .WithCronSchedule("0 0/5 * * * ?") .Build(); //WithCronSchedule: 秒 分钟 小时 日期(1~31) 月份(1~12) 星期几 //*表示任意 -表示区间 _log.Info("注册工作任务"); ISchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = factory.GetScheduler(); scheduler.ScheduleJob(job, trigger); scheduler.Start(); }
private void Grid_Click(object sender, RoutedEventArgs e) { Button button = e.Source as Button; if (button.Name == nameof(btnStart)) { scheduler = StdSchedulerFactory.GetDefaultScheduler(); IJobDetail job = JobBuilder.Create <ExecutePsFileJob>() .WithIdentity("job1", "group1") .Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule(cronExpression) .Build(); // Tell quartz to schedule the job using our trigger scheduler.ScheduleJob(job, trigger); scheduler.Start(); Logger.Info("Start..."); } else if (button.Name == nameof(btnStop)) { scheduler.Shutdown(); Logger.Info("Stop"); } }
public static void Start() { log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config")); // construct a scheduler factory ISchedulerFactory schedFact = new StdSchedulerFactory(); // get a scheduler IScheduler sched = schedFact.GetScheduler(); sched.Start(); // define the job and tie it to our HelloJob class IJobDetail job = JobBuilder.Create <TimerJob>() .WithIdentity("myJob", "group1") .Build(); //5 minutes between 8am and 23pm, every day ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0 0/5 8-23 * * ?") .Build(); sched.ScheduleJob(job, trigger); }
protected override void OnStart(string[] args) { //proceso dos alerta reparos string tiempoEjecucionActualizacionAutomatica = ConfigurationManager.AppSettings["tiempoEjecucionActualizacionAutomatica"].ToString(); // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(); sched = sf.GetScheduler(); // jobs can be scheduled before sched.start() has been called // job 1 will run every 20 seconds IJobDetail job1 = JobBuilder.Create <DescargaAutomaticaActualizacion>() .WithIdentity("job1", "group1") .Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule(tiempoEjecucionActualizacionAutomatica) .Build(); DateTimeOffset ft = sched.ScheduleJob(job1, trigger); //All of the jobs have been added to the scheduler, but none of the //jobs // will run until the scheduler has been started sched.Start(); }
/// <summary> /// 根据cron表达式定时执行一个job /// </summary> /// <param name="strJobKey">job key</param> /// <param name="strTriggerKey">trigger key</param> /// <param name="parameterList">传入参数</param> /// <param name="cron">cron 表达式</param> public static void Execute <T>(string strJobKey, string strTriggerKey, IDictionary <string, object> parameterList, string cron) where T : IJob { ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sched = sf.GetScheduler(); JobKey jobKey = new JobKey(strJobKey); sched.DeleteJob(jobKey); TriggerKey triggerKey = new TriggerKey(strTriggerKey); IJobDetail job = JobBuilder.Create <T>() .WithIdentity(jobKey) .Build(); if (null != parameterList) { foreach (var item in parameterList) { job.JobDataMap.Add(item.Key, item.Value); } } // 触发器 ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity(triggerKey) .WithCronSchedule(cron) .Build(); sched.ScheduleJob(job, trigger); sched.Start(); }
/// <summary> /// Function: start job with a given schedule /// </summary> /// <param name="schedule">Quartz formatted schedule</param> public void StartJob(string schedule) { // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(); _sched = sf.GetScheduler(); // jobs can be scheduled before sched.start() has been called // job 1 will run every X minute string jobID = "Strategy Job " + _strategy.ID + " " + schedule; IJobDetail job = JobBuilder.Create <StrategyJob>() .WithIdentity(jobID, "Strategy Group") .Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity(jobID, "Strategy Group") //.WithCronSchedule("0 0/" + minutes + " * * * ?") .WithCronSchedule(schedule) .Build(); job.JobDataMap["Strategy"] = _strategy; DateTimeOffset ft = _sched.ScheduleJob(job, trigger); // All of the jobs have been added to the scheduler, but none of the // jobs // will run until the scheduler has been started _sched.Start(); }
public long GetRunTime(string cron, int runTime) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown checked { try { CronScheduleBuilder val = CronScheduleBuilder.CronSchedule(cron); ICronTrigger val2 = (ICronTrigger)TriggerBuilder.Create().WithSchedule((IScheduleBuilder)(object)val).Build(); DateTimeOffset dateTimeOffset = DateTimeOffset.Now.Subtract(TimeSpan.FromMinutes(runTime)).ToLocalTime(); IList <DateTimeOffset> list = (IList <DateTimeOffset>)TriggerUtils.ComputeFireTimesBetween((IOperableTrigger)val2, (ICalendar)null, dateTimeOffset, DateTimeOffset.Now.ToLocalTime()); foreach (DateTimeOffset item in list) { long num = (long)Math.Round(item.AddMinutes(runTime).Subtract(DateTimeOffset.Now).TotalMilliseconds); if (num > 0 && num <= runTime * 60 * 1000) { return(num); } } } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; log.Error((object)ex2); ProjectData.ClearProjectError(); } return(0L); } }
static void Main(string[] args) { Console.WriteLine(DateTime.Now.ToString("r")); //1.首先创建一个作业调度池 ISchedulerFactory schedf = new StdSchedulerFactory(); IScheduler sched = schedf.GetScheduler(); //2.创建出来一个具体的作业 IJobDetail job = JobBuilder.Create <JobDemo>().Build(); //NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。 DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2); DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddHours(2), 3); //3.创建并配置一个触发器 //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(int.MaxValue)).Build(); //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime) // .WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(100)) // .Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime) .WithCronSchedule("1,10,14 10,20,25,26,33,54 * * * ? ") .Build(); //4.加入作业调度池中 sched.ScheduleJob(job, trigger); //5.开始运行 sched.Start(); Console.ReadKey(); //Add some comments. }
/// <summary> /// 开启任务 /// </summary> public void Start() { ISchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = factory.GetScheduler().Result; foreach (TaskInfo info in tasks) { if (info.IsEnabled) { Type type = Type.GetType(info.TaskType); if (type != null) { string name = type.Name + "_trigger"; IJobDetail jobDetail = JobBuilder.Create(typeof(QuartzTask)).WithIdentity(type.Name).Build(); jobDetail.JobDataMap.Add(new KeyValuePair <string, object>("Id", info.Id)); TriggerBuilder builder = TriggerBuilder.Create().WithIdentity(name).WithCronSchedule(info.TaskRule); if (info.StartDate > DateTime.MinValue) { builder.StartAt(new DateTimeOffset(info.StartDate)); } DateTime?endDate = info.EndDate; DateTime startDate = info.StartDate; if (endDate.HasValue ? (endDate.GetValueOrDefault() > startDate) : false) { DateTime?nullable2 = info.EndDate; builder.EndAt(nullable2.HasValue ? new DateTimeOffset?(nullable2.GetValueOrDefault()) : null); } ICronTrigger trigger = (ICronTrigger)builder.Build(); DateTime dateTime = scheduler.ScheduleJob(jobDetail, trigger).Result.DateTime; info.NextDate = new DateTime?(TimeZoneInfo.ConvertTime(dateTime, trigger.TimeZone)); } } } scheduler.Start(); }
/// <summary> /// 修改Job时间 /// </summary> /// <param name="triggerName"></param> /// <param name="triggerGroup"></param> /// <param name="timeExp"></param> /// <returns></returns> public bool ModifyJobTime(string triggerName, string triggerGroup, string timeExp) { try { IScheduler schedule = scheduleFactory.GetScheduler(); ICronTrigger trigger = (ICronTrigger)schedule.GetTrigger(new TriggerKey(triggerName, triggerGroup)); if (trigger == null) { //log:未找到触发器triggerName:triggerName+triggerGroup:triggerGroup return(false); } string oldCron = trigger.CronExpressionString; string newCron = timeExp; if (oldCron != newCron) { schedule.PauseTrigger(new TriggerKey(triggerName, triggerGroup)); trigger.CronExpressionString = newCron; schedule.RescheduleJob(new TriggerKey(triggerName, triggerGroup), trigger); // schedule.ResumeTrigger(new TriggerKey(triggerName, triggerGroup)); } return(true); } catch (Exception ex) { //log:修改任务失败+triggerName:triggerName+triggerGroup:triggerGroup+ex.message return(false); } }
private static void Example1() { Console.WriteLine(DateTime.Now.ToString("r")); //1.首先创建一个作业调度池 ISchedulerFactory schedf = new StdSchedulerFactory(); IScheduler sched = schedf.GetScheduler().Result; //2.创建出来一个具体的作业 IJobDetail job = JobBuilder.Create <JobDemo>().Build(); //3.创建并配置一个触发器 //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(3)).Build(); //NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。 //使用2:假如没执行完1分钟后不执行 DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2); //DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddMinutes(1), 3); //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime). // WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(100)).Build(); //使用3:每分钟的第1,10,14,25,35,50秒执行一次。 //那么上面显然是不能满足的。这是我就把cron-like(由7段构成:秒 分 时 日 月 星期 年(可选))表达式引入进来,以实现各种时间纬度的调用 //"-" :表示范围 MON-WED表示星期一到星期三 // "," :表示列举 MON, WEB表示星期一和星期三 //"*" :表是“每”,每月,每天,每周,每年等 //"/" :表示增量:0 / 15(处于分钟段里面) 每15分钟,在0分以后开始,3 / 20 每20分钟,从3分钟以后开始 //"?" :只能出现在日,星期段里面,表示不指定具体的值 //"L" :只能出现在日,星期段里面,是Last的缩写,一个月的最后一天,一个星期的最后一天(星期六) //"W" :表示工作日,距离给定值最近的工作日 //"#" :表示一个月的第几个星期几,例如:"6#3"表示每个月的第三个星期五(1 = SUN...6 = FRI,7 = SAT) DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime) .WithCronSchedule("1,10,14,25,35,50 * * * * ? ") .Build(); //4.加入作业调度池中 sched.ScheduleJob(job, trigger); //加入第二个作业 1个job只能绑定在1个trigger IJobDetail job2 = JobBuilder.Create <JobDemo2>().WithIdentity("job2", "gorup2").Build(); ISimpleTrigger trigger2 = (ISimpleTrigger)TriggerBuilder.Create(). WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(2)).Build(); sched.ScheduleJob(job2, trigger2); //5.开始运行 sched.Start(); ////挂起3分钟 //Thread.Sleep(TimeSpan.FromMinutes(3)); ////3分钟后关闭作业调度,将不在执行 //sched.Shutdown(); //暂停所有 //sched.PauseAll(); //1分钟后移除trigger2 Thread.Sleep(TimeSpan.FromMinutes(1)); //重启 //sched.ResumeAll(); sched.UnscheduleJob(trigger2.Key);//移除trigger2 }
private void btnTest1_Click(object sender, EventArgs e) { // construct a scheduler factory ISchedulerFactory schedFact = new StdSchedulerFactory(); // get a scheduler IScheduler sched = schedFact.GetScheduler(); IJobDetail myJob = JobBuilder.Create <HelloJob>() .WithIdentity("myJob", "group1") .Build(); //Build a trigger that will fire every other minute, between 8am and 5pm, every day: ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 0/2 8-17 * * ?") .ForJob("myJob", "group1") .Build(); //Build a trigger that will fire daily at 10:42 am: // we use CronScheduleBuilder's static helper methods here trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 42)) .ForJob(myJob) .Build(); trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 42 10 * * ?") .ForJob("myJob", "group1") .Build(); //Build a trigger that will fire on Wednesdays at 10:42 am, in a TimeZone other than the system's default: trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithSchedule(CronScheduleBuilder .WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, 10, 42) .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) .ForJob(myJob) .Build(); trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 42 10 ? * WED", x => x .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) .ForJob(myJob) .Build(); // When building CronTriggers, you specify the misfire instruction as part of the cron schedule (via WithCronSchedule extension method):失败后某人指令 trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 0/2 8-17 * * ?", x => x .WithMisfireHandlingInstructionFireAndProceed()) .ForJob("myJob", "group1") .Build(); sched.ScheduleJob(myJob, trigger); }
public void Execute(IJobExecutionContext context) { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = schedulerFactory.GetScheduler(); string jobGroupName = "DownDataJobGroup"; string triGroupName = "DownDataTriGroup"; string jobNamePex = "DownDataJob_"; string triNamePex = "DownDataTri_"; List <string> rescheduledJobs = new List <string>(); //获取所有下载的任务 var allTask = AllDownData();; var triKeyArr = scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals(triGroupName)); //删除触发器 foreach (var t in triKeyArr) { var trigger = scheduler.GetTrigger(t); IJobDetail job = scheduler.GetJobDetail(trigger.JobKey); var tmp = allTask.SingleOrDefault(x => triNamePex + x.ID.ToString() == t.Name); if (tmp == null) { StopTask(Convert.ToInt32(t.Name.Replace(triNamePex, ""))); scheduler.DeleteJob(trigger.JobKey); logger.InfoFormat("脚本服务 移除下表触发器ID【{0}】", t.Name); } } foreach (var t in allTask) { //新任务 if (triKeyArr.SingleOrDefault(x => x.Name == triNamePex + t.ID.ToString()) == null) { IJobDetail job = JobBuilder.Create <DataDownQuartz>() .WithIdentity(new JobKey(jobNamePex + t.ID.ToString(), jobGroupName)) .StoreDurably() .Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity(new TriggerKey(triNamePex + t.ID.ToString(), triGroupName)) .ForJob(job) .StartNow().WithCronSchedule(t.CRON_EXPRESSION) .Build(); logger.InfoFormat("脚本服务 添加下表触发器ID【{0}】", trigger.Key.Name); scheduler.ScheduleJob(job, trigger); } else { ICronTrigger trigger = (ICronTrigger)scheduler.GetTrigger(new TriggerKey(triNamePex + t.ID.ToString(), triGroupName)); IJobDetail job = scheduler.GetJobDetail(trigger.JobKey); if (trigger.CronExpressionString != t.CRON_EXPRESSION) { logger.InfoFormat("脚本服务 修改触发器【{0}】的时间表达式【{1}】为【{2}】", trigger.Key.Name, trigger.CronExpressionString, t.CRON_EXPRESSION); trigger.CronExpressionString = t.CRON_EXPRESSION; } } } }
public static CronTriggerViewModel FromTrigger(ICronTrigger trigger) { return(new CronTriggerViewModel() { Expression = trigger.CronExpressionString, TimeZone = trigger.TimeZone.Id, }); }
/// <summary> /// 指定时间执行任务 /// </summary> /// <typeparam name="T">任务类,必须实现IJob接口</typeparam> /// <param name="cronExpression">cron表达式,即指定时间点的表达式</param> public void ExecuteByCron(string cronExpression) { ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithCronSchedule(cronExpression) .Build(); Scheduler.ScheduleJob(Job, trigger); }
private static bool ValidateJobConfiguration <TJobData>(ICronTrigger trigger, IJobDetail job, JobConfiguration <TJobData> jobConfiguration) where TJobData : IJobDataConfiguration <TJobData> { if (job == null) { return(false); } var jobDataMap = job.JobDataMap; var jobScheduling = jobDataMap[JOB_SCHEDULING_CONFIGURATION] as JobSchedulingConfiguration; if (jobScheduling == null) { _logger.Info($"Job '{job.Key}' has been unscheduled, because of missing job scheduling information."); return(false); } if (!jobScheduling.Equals(jobConfiguration.Scheduling)) { _logger.Info($"Job '{job.Key}' has been unscheduled, because jobs scheduling differs from configured scheduling."); return(false); } var jobData = jobDataMap[JOB_DATA_CONFIGURATION]; if (jobData == null) { _logger.Info($"Job '{job.Key}' has been unscheduled, because of missing job data information."); return(false); } if (jobData.GetType() != typeof(TJobData)) { _logger.Info($"Job '{job.Key}' has been unscheduled, because jobs data type differs from configured job data type."); return(false); } var jobDataType = (TJobData)jobData; if (!jobDataType.Equals(jobConfiguration.JobData)) { _logger.Info($"Job '{job.Key}' has been unscheduled, because jobs data differs from configured job data."); return(false); } // check trigger cron expression // reschedule, if needed var countOfFailedExecutions = job.GetCountOfExceptionFires(); var isPaused = _scheduler.GetTriggerState(trigger.Key).Result == TriggerState.Paused; var configurationCronExpression = (countOfFailedExecutions > 0 || isPaused) ? jobConfiguration.Scheduling.SchedulerOnFail : jobConfiguration.Scheduling.Scheduler; if (!configurationCronExpression.Equals(trigger.CronExpressionString)) { _scheduler.RescheduleJob(trigger.Key, configurationCronExpression); } return(true); }
private static void Schedule(IScheduler sched, Type type, IConfiguration config) { IScheduleJob scheduleJob = (IScheduleJob)Activator.CreateInstance(type); // define the job and tie it IJobDetail job = JobBuilder.Create(type) .WithIdentity(type.Name) .Build(); sched.PauseJob(job.Key); String cron = config.GetSection($"Scheduler:Crons:{type.Name}").Value; // Update trigger if (String.IsNullOrEmpty(cron)) { Console.WriteLine(scheduleJob.ToString() + " pasued."); (scheduleJob.ToString() + " pasued.").Log(); } else { CronScheduleBuilder cronBuilder = CronScheduleBuilder.CronSchedule(cron); ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity(type.Name + "Trigger") .WithSchedule(cronBuilder) .ForJob(job) .Build(); IReadOnlyCollection <ITrigger> triggers = sched.GetTriggersOfJob(job.Key).Result; ICronTrigger currentTrigger = triggers.FirstOrDefault(x => x.GetType().Equals(typeof(CronTriggerImpl))) as ICronTrigger; if (currentTrigger == null) { sched.ScheduleJob(job, cronTrigger); } else if (currentTrigger.CronExpressionString != cronTrigger.CronExpressionString) { sched.RescheduleJob(cronTrigger.Key, cronTrigger); } sched.ResumeJob(job.Key); Console.WriteLine(scheduleJob.ToString() + " scheduled: " + cronTrigger.CronExpressionString); (scheduleJob.ToString() + " scheduled: " + cronTrigger.CronExpressionString).Log(); try { scheduleJob.ResumeJob(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); ex.Log(); } } }
/// <summary> /// 添加任务计划//或者进程终止后的开启 /// </summary> /// <returns></returns> public static async Task <bool> StartScheduleJobAsync(Diary info) { try { if (info != null) { if (info.RunningStart == null) { info.RunningStart = DateTime.Now; } DateTimeOffset startRunTime = DateBuilder.NextGivenSecondDate(info.RunningStart, 1); if (info.RunningEnd == null) { info.RunningEnd = DateTime.MaxValue.AddDays(-1); } DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(info.RunningEnd, 1); if (string.IsNullOrWhiteSpace(info.CronExpress)) { DateTime dt = DateTime.Now.AddMinutes(1); info.CronExpress = $"0 {dt.Minute} {dt.Hour} * * ?"; } _scheduler = await GetSchedulerAsync(); Type type = typeof(RemindJob); // Type.GetType(info.JobName, true, true); IJobDetail job = JobBuilder.Create(type) .WithIdentity(info.JobName, info.JobGroup) .Build(); job.JobDataMap.Put(Common.REMIND_CONTENT, $"【主题】{info.Title}\r\n【内容】{info.Content}"); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .StartAt(startRunTime) .EndAt(endRunTime) .WithIdentity(info.JobName, info.JobGroup) .WithCronSchedule(info.CronExpress) .Build(); ((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing; IList <ICronTrigger> triggers = new List <ICronTrigger> { trigger }; await _scheduler.ScheduleJob(job, new ReadOnlyCollection <ICronTrigger>(triggers), true); if (!_scheduler.IsStarted) { await _scheduler.Start(); } return(true); } return(false); } catch (Exception ex) { if (ex.Message.Contains("because one already exists with this identification")) { _ = await ResumeScheduleJobAsync(info); } return(false); } }
public static string ToCronString(this CronScheduleBuilder cronSchedule) { ICronTrigger trigger = (ICronTrigger)TriggerBuilder .Create() .WithSchedule(cronSchedule) .Build(); return(trigger.CronExpressionString); }
/// <summary> /// 添加调度任务 /// </summary> /// <param name="JobName">任务名称</param> /// <param name="JobGroup">任务分组</param> /// <param name="JobNamespaceAndClassName">任务完全限定名</param> /// <param name="JobAssemblyName">任务程序集名称</param> /// <param name="CronExpress">Cron表达式</param> /// <param name="StarTime">开始时间</param> /// <param name="EndTime">结束时间</param> /// <returns></returns> public async Task <ScheduleResult> AddJobAsync(String JobName, String JobGroup, String JobNamespaceAndClassName, String JobAssemblyName, string CronExpress) { ScheduleResult result = new ScheduleResult(); try { if (string.IsNullOrEmpty(JobName) || string.IsNullOrEmpty(JobGroup) || string.IsNullOrEmpty(JobNamespaceAndClassName) || string.IsNullOrEmpty(JobAssemblyName) || string.IsNullOrEmpty(CronExpress)) { result.ResultCode = -3; result.ResultMsg = $"参数不能为空"; return(result);//出现异常 } var starRunTime = DateTime.Now; var EndTime = DateTime.MaxValue.AddDays(-1); DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(EndTime, 1); JobKey jobKey = new JobKey(JobName, JobGroup); if (await Scheduler.CheckExists(jobKey)) { await Scheduler.PauseJob(jobKey); await Scheduler.DeleteJob(jobKey); } Assembly assembly = Assembly.LoadFile(JobAssemblyName); Type jobType = assembly.GetType(JobNamespaceAndClassName); //var jobType = Type.GetType(JobNamespaceAndClassName + "," + JobAssemblyName); if (jobType == null) { result.ResultCode = -1; result.ResultMsg = "系统找不到对应的任务,请重新设置"; return(result);//出现异常 } IJobDetail job = JobBuilder.Create(jobType) .WithIdentity(jobKey).UsingJobData("ServerName", Scheduler.SchedulerName) .Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .StartAt(starRunTime) .EndAt(endRunTime) .WithIdentity(JobName, JobGroup) .WithCronSchedule(CronExpress) .Build(); await Scheduler.ScheduleJob(job, trigger); if (!Scheduler.IsStarted) { await Scheduler.Start(); } return(result); } catch (Exception ex) { _logger.LogError(ex, nameof(AddJobAsync)); result.ResultCode = -4; result.ResultMsg = ex.ToString(); return(result);//出现异常 } }
public void TestQuartz558() { CronTriggerImpl trigger = new CronTriggerImpl(); trigger.Name = ("test"); trigger.Group = ("testGroup"); ICronTrigger trigger2 = (ICronTrigger)trigger.Clone(); Assert.AreEqual(trigger, trigger2, "Cloning failed"); }
/// <summary> /// 创建CronTrigger /// </summary> /// <returns></returns> private ICronTrigger CreateCronTrigger(TaskJobInfo taskJob) { var scheduleBuilder = CronScheduleBuilder.CronSchedule(taskJob.CronExpression); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing()) .WithIdentity(taskJob.JobName) .Build(); return(trigger); }
/// <summary> /// 定时执行任务 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="cronExpression">参数顺序:0 0 9,16 * * ?,参数说明:秒|分|时(多个时间用逗号分隔)|每月中哪一天|月|每周中的哪一天|年</param> /// <param name="jobKey">作业唯一标识</param> public static void Task <T>(string cronExpression, string jobKey) where T : IJob { ExecuteScheduler <T>(jobKey, cronExpression, QuartzTypeEnum.Task, () => { ICronTrigger iTrigger = (ICronTrigger)TriggerBuilder.Create() .WithCronSchedule(cronExpression) .Build(); return(iTrigger); }); }
private void UpdateDetails(ICronTrigger trigger) { var ctrl = new CronTriggerDisplay(trigger) { Dock = DockStyle.Fill }; pnlDetails.Controls.Clear(); pnlDetails.Controls.Add(ctrl); }
public void TestRun() { Debug.WriteLine("-Scheduling Jobs-"); //DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 15); IJobDetail jobDetail = JobBuilder.Create <SimpleJob>().WithIdentity("job1", jobGroup).Build(); ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create().WithIdentity("trigger1", jobGroup).WithCronSchedule("0/2 * * * * ?").StartNow().Build(); DateTimeOffset?ft = _scheduler.ScheduleJob(jobDetail, cronTrigger).Result; Debug.WriteLine($"{jobDetail.Key} has been scheduled to run at {ft} and repeat based on expression: {cronTrigger.CronExpressionString}"); this.Start(); }
public static void AssignQuartzTrigger(this CronTriggerImpl cronTrigger, ICronTrigger trigger) { cronTrigger.MisfireInstruction = trigger.MisfireInstruction; cronTrigger.CronExpressionString = trigger.CronExpressionString; cronTrigger.TimeZone = TimeZoneInfo.FindSystemTimeZoneById(trigger.TimeZone.ToString()); }
public CronTriggerDetailDto(ICronTrigger trigger, ICalendar calendar) : base(trigger, calendar) { CronExpression = trigger.CronExpressionString; TimeZone = new TimeZoneDto(trigger.TimeZone); }
public CronTriggerDisplay(ICronTrigger trigger) : this() { _Trigger = trigger; }