Exemplo n.º 1
0
        public static TriggerBuilder WithIdentity_(this TriggerBuilder builder, string name, string group = null)
        {
            var res = ValidateHelper.IsNotEmpty(group) ?
                      builder.WithIdentity(name, group) :
                      builder.WithIdentity(name);

            return(res);
        }
Exemplo n.º 2
0
        //间隔一定时间重复一次执行指定的任务
        public static async void WithInterval()
        {
            //--------------------------------1.准备调度者
            //创建调度器工厂
            ISchedulerFactory factory = new StdSchedulerFactory();
            //创建调度者
            IScheduler scheduler = await factory.GetScheduler();

            //--------------------------------2.准备任务
            //创建任务构造这:JobBuilder
            JobBuilder jobBuilder = JobBuilder.Create <TestJob1>();
            //创建任务,定义任务的名字和任务组
            //IJobDetail job = jobBuilder.WithIdentity("job1", "grpup1").Build();
            IJobDetail job1 = jobBuilder.Build();

            //--------------------------------3.准备触发器
            //创建触发器构造者:TriggerBuilder
            TriggerBuilder triggerBuilder = TriggerBuilder.Create().StartNow().WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(2));//此处RepeatForever()为重复无数次,使用.WithRepeatCount()可以设置重复的次数
            //创建触发器,定义触发器的名字和触发组
            ISimpleTrigger trigger = triggerBuilder.WithIdentity("trigger1", "group2").Build() as ISimpleTrigger;

            //--------------------------------4、将任务与触发器添加到调度器中
            await scheduler.ScheduleJob(job1, trigger);

            //开始执行
            await scheduler.Start();

            //调度器延时调度,但是注意,在调度器延时的时候,定时任务可能计时已经开始了,
            //一旦结束调度器的延时,定时任务会把之前延时的时间中应该执行的任务都一次性执行了
            //await scheduler.StartDelayed(TimeSpan.FromSeconds(20));
        }
        /// <summary>
        /// 应用触发器数据
        /// </summary>
        /// <param name="triggerName"></param>
        /// <param name="trigger"></param>
        /// <param name="triggerBuilder"></param>
        /// <returns></returns>
        private static TriggerBuilder ApplyTriggerData(string triggerName, TriggerType trigger, TriggerBuilder triggerBuilder)
        {
            if (!string.IsNullOrEmpty(triggerName))
            {
                triggerBuilder = triggerBuilder.WithIdentity(triggerName);
            }

            if (trigger is SimpleTriggerType simpleTrigger)
            {
                triggerBuilder = triggerBuilder.WithSimpleSchedule(x =>
                {
                    if (simpleTrigger.RepeatCount == -1)
                    {
                        x.RepeatForever();
                    }
                    else
                    {
                        x.WithRepeatCount(simpleTrigger.RepeatCount);
                    }

                    x.WithInterval(TimeSpan.FromMilliseconds(simpleTrigger.RepeatInterval));
                });
            }
            else if (trigger is CronTriggerType cronTriggerType)
            {
                triggerBuilder = triggerBuilder.WithCronSchedule(cronTriggerType.CronExpression);
            }
            else
            {
                throw new Exception("不支持的 trigger type: " + trigger.Code);
            }

            return(triggerBuilder);
        }
Exemplo n.º 4
0
    public static void CreateJob <T>(JobInfo jInfo, ref IScheduler scheduler) where T : IJob
    {
        JobBuilder jbuilder = JobBuilder.Create <T>();

        jbuilder.WithIdentity(jInfo.JobName, jInfo.GroupName);

        if (jInfo.DataParamters != null && jInfo.DataParamters.Any())
        {
            foreach (var item in jInfo.DataParamters)
            {
                jbuilder.UsingJobData(GetDataMap(item));
            }
        }

        IJobDetail jobDetail = jbuilder.Build();

        TriggerBuilder tBuilder = TriggerBuilder.Create();

        tBuilder.WithIdentity(jInfo.TriggerName, jInfo.GroupName)
        .StartNow()
        .WithCronSchedule(jInfo.CronExpression);
        //.WithSimpleSchedule(x => x
        //    .WithIntervalInSeconds(10)
        //    .RepeatForever());

        ITrigger trigger = tBuilder.Build();

        scheduler.ScheduleJob(jobDetail, trigger);
    }
        public BaseResult AddTrigger(AddTriggerInput input)
        {
            var result = new BaseResult();

            try
            {
                TriggerBuilder triggerBuilder = TriggerBuilder
                                                .Create()
                                                .ForJob(input.Job, input.Group);

                if (!string.IsNullOrEmpty(input.Name))
                {
                    triggerBuilder = triggerBuilder.WithIdentity(input.Name);
                }

                switch (input.TriggerType)
                {
                case "Simple":
                    triggerBuilder = triggerBuilder.WithSimpleSchedule(x =>
                    {
                        if (input.RepeatForever)
                        {
                            x.RepeatForever();
                        }
                        else
                        {
                            x.WithRepeatCount(input.RepeatCount);
                        }

                        x.WithInterval(TimeSpan.FromMilliseconds(input.RepeatInterval));
                    });
                    if (!string.IsNullOrEmpty(input.StartDate))
                    {
                        var startDate = DateTimeOffset.Parse(input.StartDate);
                        triggerBuilder.StartAt(startDate);
                    }
                    break;

                case "Cron":
                    triggerBuilder = triggerBuilder.WithCronSchedule(input.CronExpression);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                _schedulerProvider.Scheduler.ScheduleJob(triggerBuilder.Build());
                result.Success = true;
            }
            catch (Exception ex)
            {
                result.ErrorMessage = ex.Message;
            }
            return(result);
        }
Exemplo n.º 6
0
        //WithSimpleSchedule
        private static void Scheduler1()
        {
            try
            {
                Console.ReadLine();

                //开启日志输出
                Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter {
                    Level = Common.Logging.LogLevel.Info
                };
                ILog log = LogManager.GetLogger(typeof(Program));

                //从计划器工作实例化一个计划实例;
                IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
                //定义一个job
                IJobDetail job = JobBuilder.Create <Job1>()
                                 .WithIdentity("job1", "grop1")
                                 .UsingJobData("jobSays", "Hello World!")
                                 .UsingJobData("myFloatValue", 3.141f)
                                 .Build();

                //定义一个trigger
                ITrigger       trigger        = null;
                TriggerBuilder triggerBuilder = TriggerBuilder.Create();


                triggerBuilder.WithIdentity("trigger1", "group1");
                triggerBuilder.StartNow();                                                          //按当前时间立即执行
                triggerBuilder.WithSimpleSchedule(x => x.WithIntervalInSeconds(3).RepeatForever()); //每3秒执行,永远重复
                trigger = triggerBuilder.Build();

                //开始为任务做计划
                DateTimeOffset dto = scheduler.ScheduleJob(job, trigger);

                // 计划任务开始
                scheduler.Start();

                // some sleep to show what's happening
                //Thread.Sleep(TimeSpan.FromSeconds(2));

                // and last shut down the scheduler when you are ready to close your program
                //scheduler.Shutdown();

                //Console.ReadLine();
            }
            catch (SchedulerException se)
            {
                Console.WriteLine(se);
            }
        }
Exemplo n.º 7
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());
        }
Exemplo n.º 8
0
        protected override async Task InternalExecute(AddTriggerInput input, CommandResultWithErrorDetails output)
        {
            TriggerBuilder triggerBuilder = TriggerBuilder
                                            .Create()
                                            .ForJob(input.Job, input.Group);

            if (!string.IsNullOrEmpty(input.Name))
            {
                triggerBuilder = triggerBuilder.WithIdentity(input.Name);
            }

            switch (input.TriggerType)
            {
            case "Simple":
                triggerBuilder = triggerBuilder.WithSimpleSchedule(x =>
                {
                    if (input.RepeatForever)
                    {
                        x.RepeatForever();
                    }
                    else
                    {
                        x.WithRepeatCount(input.RepeatCount);
                    }

                    x.WithInterval(TimeSpan.FromMilliseconds(input.RepeatInterval));
                });
                break;

            case "Cron":
                triggerBuilder = triggerBuilder.WithCronSchedule(input.CronExpression);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            await(await Scheduler().ConfigureAwait(false)).ScheduleJob(triggerBuilder.Build()).ConfigureAwait(false);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 根据数据采集计划来创建作业触发器
        /// </summary>
        /// <param name="jobDetail">采集计划</param>
        /// <param name="clMethod">数据采集方法</param>
        /// <param name="forJob">将此触发器添加到哪个作业</param>
        /// <returns></returns>
        public static ITrigger CreateTrigger(ScheduleJob_Details_Triggers trigger, IJobDetail forJob = null)
        {
            if (trigger == null)
            {
                throw new ArgumentNullException("『CreateTrigger』的trigger参数为空!");
            }
            TriggerBuilder builder = TriggerBuilder.Create();

            builder =
                builder
                .WithIdentity(GetTriggerKey(trigger))
                .WithDescription(trigger.description);
            builder =
                trigger.trigger_type.ToUpper() == "cron".ToUpper() ? (
                    string.IsNullOrEmpty(trigger.cronexpression) ?
                    builder.WithSimpleSchedule(x => x.WithIntervalInMinutes(string.IsNullOrEmpty(trigger.repeat_interval) ? 30 : int.Parse(trigger.repeat_interval)).WithRepeatCount(string.IsNullOrEmpty(trigger.repeat_count) ? 10 : int.Parse(trigger.repeat_count)))
                    : builder.WithCronSchedule(trigger.cronexpression)
                    ) : builder.WithSimpleSchedule(x => x.WithIntervalInMinutes(string.IsNullOrEmpty(trigger.repeat_interval) ? 30 : int.Parse(trigger.repeat_interval)).WithRepeatCount(string.IsNullOrEmpty(trigger.repeat_count) ? 10 : int.Parse(trigger.repeat_count)));
            if (forJob != null)
            {
                builder.ForJob(forJob);
            }
            return(builder.Build());
        }
Exemplo n.º 10
0
        public void Init()
        {
            try
            {
                string devHotName = ConfigurationManager.AppSettings["DEVHOSTNAME"];//开发计算机
                string hostName   = HelperEnvironmentSetting.GetHostName();
                string appName    = ConfigurationManager.AppSettings["APPNAME"];
                if (string.IsNullOrEmpty(appName))
                {
                    appName = AppDomain.CurrentDomain.FriendlyName.Replace(".vshost", "");
                }
                string responservername      = null;
                string responservernameBydev = null;
                responservername      = hostName + "&" + appName;
                responservernameBydev = devHotName + "&" + appName;
                System.Console.WriteLine("responservername:" + responservername);
                System.Console.WriteLine("devHotName:" + responservername);
                List <JobEntity> jobEntityList = new List <JobEntity>();
                using (IDbConnection dbConn = HelperConnection.GetConnectionFactory().OpenDbConnection())
                {
                    SqlExpression <JobEntity> expression = dbConn.From <JobEntity>();
                    expression.And(x => x.STATE == "1");//加载启用状态的定时器
                    if (devHotName == hostName)
                    {
                        expression.And(x => x.RESPONSESVRNAMEBYDEV == responservernameBydev);
                    }
                    else
                    {
                        expression.And(x => x.RESPONSESVRNAME == responservername);
                    }

                    jobEntityList = dbConn.Select <JobEntity>(expression).OrderBy <JobEntity, int>((Func <JobEntity, int>)(x => x.JOBID)).ToList <JobEntity>();
                    if (jobEntityList == null || jobEntityList.Count == 0)
                    {
                        this.logger.Info((object)"启动定时服务失败,未查询到相关数据!");
                    }
                    else
                    {
                        this.logger.Info((object)(responservername + ",加载" + jobEntityList.Count.ToString() + "个JOB"));
                        this.scheduler = this.schedulerFactory.GetScheduler();
                        this.scheduler.Clear();
                        foreach (JobEntity jobEntity in jobEntityList)
                        {
                            Type type = Type.GetType(jobEntity.CLASSFULLNAME);
                            if (type == (Type)null)
                            {
                                this.logger.Info((object)("无法获取:" + jobEntity.CLASSFULLNAME));
                            }
                            else
                            {
                                int            jobid          = jobEntity.JOBID;
                                IJobDetail     jobDetail      = (IJobDetail) new JobDetailImpl(jobid.ToString() + "-" + jobEntity.JOBDESC, "CIMS.Server", type, true, true);
                                TriggerBuilder triggerBuilder = TriggerBuilder.Create();
                                jobid = jobEntity.JOBID;
                                string   key     = jobid.ToString() + "-" + jobEntity.JOBTRIGGER;
                                ITrigger trigger = triggerBuilder.WithIdentity(key).WithCronSchedule(jobEntity.JOBTRIGGERPARA).Build();
                                jobDetail.JobDataMap.Put("BASE_JOB", (object)jobEntity);
                                jobDetail.JobDataMap.Put("JobKey", jobEntity.JOBID);
                                JobDataMap jobDataMap = jobDetail.JobDataMap;
                                jobid = jobEntity.JOBID;
                                string str2 = jobid.ToString() + "-" + jobEntity.JOBTRIGGER;
                                jobDataMap.Put("TriggerKey", str2);
                                this.scheduler.ScheduleJob(jobDetail, trigger);

                                logger.Info(jobEntity.JOBID + "创建成功!");
                            }
                        }
                        this.logger.Info((object)(responservername + ",启动了" + jobEntityList.Count.ToString() + "个JOB"));
                        this.scheduler.Start();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                this.logger.Info((object)ex.ToString());
                this.logger.Error((object)ex.ToString());
            }
        }
Exemplo n.º 11
0
        private static void ScheduleJobs()
        {
            int priority = Jobs.Count;

            foreach (var tsk in Jobs.Where(x => x.TaskType == "S" && x.Status == "Queued")) // O - On Demand ; S- Scheduled.
            {
                var schedule = Schedules.FirstOrDefault(x => x.taskID == tsk.taskID);
                var client   = Machines.FirstOrDefault(x => x.ID == tsk.ClientID);

                IJobDetail job = JobBuilder.Create <Job>().WithIdentity(tsk.TaskName, tsk.ClientID.ToString()).Build();
                job.JobDataMap["command"]  = tsk.Command;
                job.JobDataMap["taskname"] = tsk.TaskName;
                job.JobDataMap["TaskId"]   = tsk.taskID;
                if (client != null)
                {
                    job.JobDataMap["remotepc"] = "\\\\" + client.HostName;
                    job.JobDataMap["username"] = client.Username;
                    job.JobDataMap["password"] = client.Password;
                }


                if (schedule != null)
                {
                    TriggerBuilder tb = TriggerBuilder.Create();
                    tb.WithIdentity(tsk.TaskName);

                    if (schedule.repeatforever <= 0)
                    {
                        tb.WithSimpleSchedule(a => a.WithIntervalInHours(schedule.intHours));
                        tb.WithSimpleSchedule(a => a.WithIntervalInSeconds(schedule.intSec));
                        tb.WithSimpleSchedule(a => a.WithIntervalInMinutes(schedule.intMin));
                    }
                    else
                    {
                        if (schedule.intHours > 0)
                        {
                            tb.WithSimpleSchedule(a => a.WithIntervalInHours(schedule.intHours).RepeatForever());
                        }
                        if (schedule.intHours > 0)
                        {
                            tb.WithSimpleSchedule(a => a.WithIntervalInSeconds(schedule.intSec).RepeatForever());
                        }
                        if (schedule.intHours > 0)
                        {
                            tb.WithSimpleSchedule(a => a.WithIntervalInMinutes(schedule.intMin).RepeatForever());
                        }
                    }

                    if (schedule.startAt != null)
                    {
                        tb.StartAt(new DateTimeOffset((DateTime)schedule.startAt));
                    }
                    if (schedule.endAt != null)
                    {
                        tb.EndAt(new DateTimeOffset((DateTime)schedule.endAt));
                    }



                    tb.ForJob(job);
                    ITrigger trigger = tb.Build();
                    Scheduler.ScheduleJob(job, trigger);
                }
            }
        }
Exemplo n.º 12
0
 internal TriggerHelper WithIdentity(string name, string group)
 {
     trigger.WithIdentity(name, group);
     return(this);
 }