public async Task <JobKey> ScheduleJob <T>(DateTimeOffset?startAtTime = null, JobKey?vncCheckerJobKey = null) where T : class, IJob { IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); IJobDetail jobDetail = JobBuilder.Create <T>().Build(); ITrigger trigger; TriggerBuilder triggerBuilder = TriggerBuilder.Create().StartNow() .WithSimpleSchedule(x => x.WithIntervalInSeconds(Constants.JobEecutionIntervalSec) .RepeatForever()); if (vncCheckerJobKey != null) { triggerBuilder = triggerBuilder.UsingJobData(nameof(Checker), vncCheckerJobKey.Name); } if (startAtTime != null) { trigger = triggerBuilder.StartAt((DateTimeOffset)startAtTime).Build(); } else { trigger = triggerBuilder.StartNow().Build(); } await scheduler.ScheduleJob(jobDetail, trigger); return(jobDetail.Key); }
/// <summary> /// 给现有的job 创建一个触发器 /// </summary> /// <param name="jobName"></param> /// <param name="jobGroup"></param> /// <param name="triggerName"></param> /// <param name="trigger"></param> /// <param name="jobData"></param> public void ScheduleJob(string jobName, string jobGroup, string triggerName, TriggerType trigger, IDictionary <string, object> jobData) { TriggerBuilder triggerBuilder = ApplyTriggerData( triggerName, trigger, TriggerBuilder.Create().ForJob(jobName, jobGroup)); if (jobData != null) { triggerBuilder = triggerBuilder.UsingJobData(new JobDataMap(jobData)); } //将给定的trigger与由trigger的设置标识的Job一起调度。 _scheduler.ScheduleJob(triggerBuilder.Build()); }
public void TriggerJob( string jobName, string jobGroup, string triggerName, TriggerType trigger, IDictionary <string, object> jobData) { TriggerBuilder triggerBuilder = TriggerBuilder .Create() .ForJob(jobName, jobGroup); if (!string.IsNullOrEmpty(triggerName)) { triggerBuilder = triggerBuilder.WithIdentity(triggerName); } SimpleTriggerType simpleTrigger = trigger as SimpleTriggerType; if (simpleTrigger != null) { triggerBuilder = triggerBuilder.WithSimpleSchedule(x => { if (simpleTrigger.RepeatCount == -1) { x.RepeatForever(); } else { x.WithRepeatCount(simpleTrigger.RepeatCount); } x.WithInterval(TimeSpan.FromMilliseconds(simpleTrigger.RepeatInterval)); }); } else { CronTriggerType cronTriggerType = trigger as CronTriggerType; if (cronTriggerType != null) { triggerBuilder = triggerBuilder.WithCronSchedule(cronTriggerType.CronExpression); } } if (jobData != null) { triggerBuilder = triggerBuilder.UsingJobData(new JobDataMap(jobData)); } _scheduler.ScheduleJob(triggerBuilder.Build()); }
/// <summary> /// Schedule a recurring Task /// </summary> /// <param name="Task"></param> /// <param name="CallBackDelay"></param> /// <param name="Parameters"></param> /// <returns></returns> public static TaskScheduleResult ScheduleRecurringTask(JobBuilder Task, string CronSchedule, Dictionary <string, object> Parameters = null) { TaskScheduleResult Result = new TaskScheduleResult(); Guid Id = Guid.NewGuid(); IJobDetail job = Task.WithIdentity(Id.ToString(), Task.Build().JobType.Name).Build(); bool Success = false; try { IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler.Start(); string Group = job.JobType.Name; JobKey Key = new JobKey(Id.ToString(), Group); TriggerBuilder triggerBuilder = TriggerBuilder.Create().WithIdentity(Id.ToString(), Group).WithCronSchedule( CronSchedule, x => x.InTimeZone(TimeZoneInfo.Utc) ); if (Parameters != null) { foreach (var Param in Parameters) { triggerBuilder = triggerBuilder.UsingJobData(Param.Key, Param.Value.ToString()); } } ITrigger trigger = triggerBuilder.ForJob(job).Build(); var DatetimeOffset = scheduler.ScheduleJob(job, trigger); Success = DatetimeOffset != null ? true : false; Result.GroupName = Group; Result.Id = Id.ToString(); } catch (Exception e) { Success = false; Commons.Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "job = " + job.JobType.Name); } Result.Result = Success; return(Result); }
/// <summary> /// 注册作业 /// </summary> /// <typeparam name="TJob"></typeparam> /// <param name="cronExpression">/5 * * ? * *</param> /// <param name="group"></param> /// <returns></returns> public static async Task RegisterJob <TJob>(string cronExpression, string group, Dictionary <string, string> data = null) where TJob : IJob { // 创建一个作业 IJobDetail job = JobBuilder.Create <TJob>().WithIdentity(typeof(TJob).Name, group).Build(); TriggerBuilder triggerBuilder = TriggerBuilder.Create() .WithIdentity(typeof(TJob).Name, group) .StartAt(DateTimeOffset.Now.AddSeconds(30)) .WithCronSchedule(cronExpression); if (data == null) { foreach (var item in data) { triggerBuilder.UsingJobData(item.Key, item.Value); } } var trigger = triggerBuilder.Build(); //把作业,触发器加入调度器。 await scheduler.ScheduleJob(job, trigger); }