Quartz.NET学习系列(二)--- 简单触发器

来源:互联网 发布:软件测试入门书籍 编辑:程序博客网 时间:2024/05/21 03:57

        Quartz.NET的触发器比较多,但是常用的有两个分别是SimpleTriggerCronTrigger,本篇学习下SimpleTrigger

        SimpleTrigger 的创建方式如下:

ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()                                           .WithIdentity("trigger1", "group1")                                           .StartAt(startTime)                                           .Build();
ISimpleTrigger有较多方法,常用的方法有StartAt(开始时间)  WithSimpleSchedule(执行间隔次数等设置) ForJob(特定的任务触发器)

以下是应用的代码:

        public class SimpleJob : IJob{private ILog log = LogManager.GetLogger(typeof(SimpleJob));public virtual void Execute(IJobExecutionContext context){JobKey jobKey = context.JobDetail.Key;                        log.InfoFormat("任务: {0} 执行时间:{1}", jobKey, DateTime.Now.ToString());}}

    public class SimpleTriggerExample     {        public static void Run()        {            ILog log = LogManager.GetLogger(typeof (SimpleTriggerExample));            ISchedulerFactory sf = new StdSchedulerFactory();            IScheduler sched = sf.GetScheduler();            DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 5);            //job1在5秒之后运行            IJobDetail job = JobBuilder.Create<SimpleJob>()                .WithIdentity("job1", "group1")                .Build();            ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()                                                          .WithIdentity("trigger1", "group1")                                                          .StartAt(startTime)                                                          .Build();            DateTimeOffset? ft = sched.ScheduleJob(job, trigger);            log.Info(job.Key +                     " 开始时间: " + ft +                     " 执行次数: " + trigger.RepeatCount +                     " 执行间隔" + trigger.RepeatInterval.TotalSeconds);            // job2 每1秒执行一次,共执行6次(其中开始1此,重复5次)            job = JobBuilder.Create<SimpleJob>()                .WithIdentity("job2", "group1")                .Build();            trigger = (ISimpleTrigger) TriggerBuilder.Create()                                           .WithIdentity("trigger2", "group1")                                           .StartAt(startTime)                                           .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(5))                                           .Build();            ft = sched.ScheduleJob(job, trigger);            log.Info(job.Key +                     " 开始时间: " + ft +                     " 执行次数: " + trigger.RepeatCount +                     " 执行间隔" + trigger.RepeatInterval.TotalSeconds);                        //job2被替换 原来照常执行 组别不一样            trigger = (ISimpleTrigger) TriggerBuilder.Create()                                           .WithIdentity("trigger2", "group2")                                           .StartAt(startTime)                                           .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(2))                                           .ForJob(job)                                           .Build();            ft = sched.ScheduleJob(trigger);            log.Info(job.Key +                     " 开始时间: " + ft +                     " 执行次数: " + trigger.RepeatCount +                     " 执行间隔" + trigger.RepeatInterval.TotalSeconds);            // job3 5秒后执行            job = JobBuilder.Create<SimpleJob>()                .WithIdentity("job3", "group1")                .Build();            trigger = (ISimpleTrigger) TriggerBuilder.Create()                                           .WithIdentity("trigger3", "group1")                                           .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second))                                           .Build();            ft = sched.ScheduleJob(job, trigger);            log.Info(job.Key +                     " 开始时间: " + ft +                     " 执行次数: " + trigger.RepeatCount +                     " 执行间隔" + trigger.RepeatInterval.TotalSeconds);            sched.Start();            log.Info("------- 开始计划 -----------------");            job = JobBuilder.Create<SimpleJob>()                .WithIdentity("job5", "group1")                .Build();            ISimpleTrigger trigger1 = (ISimpleTrigger)TriggerBuilder.Create()                                           .WithIdentity("trigger5", "group1")                                           .StartAt(startTime)                                           .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(2))                                           .Build();            ft = sched.ScheduleJob(job, trigger1);            log.Info(job.Key +                     " 开始时间: " + ft +                     " 执行次数: " + trigger1.RepeatCount +                     " 执行间隔" + trigger1.RepeatInterval.TotalSeconds);            job = JobBuilder.Create<SimpleJob>()                .WithIdentity("job6", "group1")                .StoreDurably()                .Build();            sched.AddJob(job, true);            log.Info("job6触发...");            sched.TriggerJob(new JobKey("job6", "group1"));            log.Info("------- 等待20秒 --------------");            Thread.Sleep(TimeSpan.FromSeconds(20));            sched.Shutdown(true);            log.Info("------- 关闭计划 -----------------");            SchedulerMetaData metaData = sched.GetMetaData();            log.Info(string.Format("执行任务数:{0}", metaData.NumberOfJobsExecuted));        }    }


代码均已经注释,以上是一些简单触发器的应用场景,主要是针对持续时间的配置

0 0
原创粉丝点击