Esempio n. 1
0
        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());
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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);
        }