zoukankan      html  css  js  c++  java
  • Quartz.Net 使用心得(一)

    最近工作内容与定时任务相关,在实际使用Quartz过程中,有两个小问题较为困扰。

    一。多个Trigger如何触发一个Job。

    比如上下班打卡时推送消息,上班时间为9:30,打卡提醒时间为9:20较好。下班时间为18:30,提醒时间为18:40较好。此时用一个CronTrigger就解决不了。又不肯启动2个Job,和两个Trigger。看了几位大神的文章,都说一个Job可以有多个Trigger驱动,在多方搜索研究下,终于搞定了这个小问题。

    方法1

                //从工厂中获取一个调度器实例化
                ISchedulerFactory factory = new StdSchedulerFactory();
                IScheduler scheduler = factory.GetScheduler();
                IJobDetail job1 = JobBuilder.Create<SignJob>()  //创建一个即时消息作业
                    .WithIdentity("打卡任务", "打卡组")
                    .Build();
    
                ITrigger trigger1 = TriggerBuilder.Create()
                                            .WithCronSchedule("0 20 9 * * ?")
                                            .ForJob(job1)//重要
                                            .Build();
                scheduler.ScheduleJob(job1, trigger1);      //把作业,触发器加入调度器。
    
                ITrigger trigger2 = TriggerBuilder.Create()
                                            .WithCronSchedule("0 40 18 * * ?")
                                            .ForJob(job1)//重要
                                            .Build();
           
                scheduler.ScheduleJob(trigger2);
                scheduler.Start();

    如此,一个Job可以有多少个Trigger了。

    方法2

            /// <summary>
            /// 负责创建按时间点执行一次的任务。
            /// </summary>
            /// <typeparam name="S"></typeparam>
            /// <param name="cycleObj"></param>
            /// <param name="t"></param>
            public static void CreateJobWithTimePoints<S>(S cycleObj, Type t) where S : BaseCycle
            {
                IScheduler scheduler = new Common.QuartzHelper().scheduler;
                IJobDetail job2 = scheduler.GetJobDetail(new JobKey(cycleObj.JobName, cycleObj.GroupName));
                if (job2 == null)
                    job2 = JobBuilder.Create(t)
                                     .WithIdentity(cycleObj.JobName, cycleObj.GroupName)
                                     .Build();
                scheduler.AddJob(job2, true, true);//重要
                foreach (DateTime dt in cycleObj.TimePoints)
                {
                    ITrigger ti = TriggerBuilder.Create()
                                .WithIdentity("TimePoints" + dt.ToString("yy-MM-dd_HH:mm:ss"), "TimePoints")
                                .StartAt(dt)                        //现在开始
                                .ForJob(job2)
                                .Build();
                    scheduler.ScheduleJob(ti);
                }
            }
  • 相关阅读:
    前端- css
    前端- html -总结
    2016.9.15 黑客编程之无限启动
    2016.9.14 JavaScript入门之七面向对象和函数
    2016.9.13 JavaScript入门之六基础函数
    2016.9.1 JavaScript入门之五
    2016.9.9 网络工程师之路由器技术
    2016.8.14 网络工程师之网关协议
    2016.8.27 JavaScript入门之四
    2016.8.22 JavaScript入门之三
  • 原文地址:https://www.cnblogs.com/luhuanong/p/4555157.html
Copyright © 2011-2022 走看看