zoukankan      html  css  js  c++  java
  • (转)Quartz.NET管理类

    最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下。

        public class QuartzManager<T> where T : class,IJob
        {
            #region 变量
           private static ISchedulerFactory schedulerFactory = new StdSchedulerFactory();  //scheduler工厂
            private static String JOB_GROUP_NAME = "JOBGROUP_NAME"; //Job群组名
           private static String TRIGGER_GROUP_NAME = "TRIGGERGROUP_NAME"; //触发器群组名
            #endregion
     
           #region 添加,删除,修改Job方法
          /// <summary>
            /// 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 
            /// </summary>
             /// <param name="pStrJobName">任务名</param>
            /// <param name="pStrCronExpress">触发器表达式</param>
             public static void addJob(string pStrJobName, string pStrCronExpress,IDictionary<string,object> pDictionary)
            {
                try
                {
                    IScheduler sched = schedulerFactory.GetScheduler();
                   // 创建任务
                    IJobDetail job = JobBuilder.Create<T>()
                        .WithIdentity(pStrJobName, JOB_GROUP_NAME)
                         .Build();
     
                     // 创建触发器
                    ITrigger trigger = TriggerBuilder.Create()
                         .WithIdentity(pStrJobName, TRIGGER_GROUP_NAME)
                        .WithCronSchedule(pStrCronExpress)
                        .Build();
    
                    //给任务传参数
                    foreach (KeyValuePair<string, object> kvp in pDictionary)
                    {
                        job.JobDataMap.Put(kvp.Key, kvp.Value);
                    }
                    sched.ScheduleJob(job, trigger);
                }
                catch (Exception e)
                 {
                     throw new Exception(e.Message);
                 }
             }
    
             /// <summary>
            /// 移除一个任务(使用默认的任务组名,触发器名,触发器组名) 
             /// </summary>
             /// <param name="pStrJobName">任务名称</param>
             public static void RemoveJob(string pStrJobName)
             {
                 try
                 {
                     IScheduler sched = schedulerFactory.GetScheduler();
                     JobKey jobKey = new JobKey(pStrJobName);
                     TriggerKey triggerKey = new TriggerKey(pStrJobName, TRIGGER_GROUP_NAME);
                     sched.PauseTrigger(triggerKey);// 停止触发器  
                      sched.UnscheduleJob(triggerKey);// 移除触发器  
                     sched.DeleteJob(jobKey);// 删除任务  
                }
                 catch (Exception e)
                 {
                     throw new Exception(e.Message);
                 }
             }
     
             /// <summary>
             /// 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) 
              /// </summary>
             /// <param name="pStrJobName">任务名</param>
             /// <param name="pStrCronExpress">触发器表达式</param>
             public static void ModifyJobTime(string pStrJobName, string pStrCronExpress,IDictionary<string,object> pDictionary)
             {
                 try
                 {
                      IScheduler sched = schedulerFactory.GetScheduler();
                     TriggerKey triggerKey = new TriggerKey(pStrJobName, TRIGGER_GROUP_NAME);
                     ICronTrigger trigger = (ICronTrigger)sched.GetTrigger(triggerKey);
                     if (trigger == null)
                     {
                        return;
                     }
                     RemoveJob(pStrJobName);
                     addJob(pStrJobName, pStrCronExpress,pDictionary);
                 }
                catch (Exception e)
                 {
                      throw new Exception(e.Message);
                 }
              }
             #endregion
     
             #region 启动,关闭Job
              /// <summary>
             /// 启动所有定时任务 
             /// </summary>
             public static void startJobs()
            {
                try
                 {
                     IScheduler sched = schedulerFactory.GetScheduler();
                    sched.Start();
                 }
                 catch (Exception e)
                {
                    throw new Exception(e.Message);
                }
             } 
     
            /// <summary>
             /// 关闭所有定时任务
             /// </summary>
             public static void ShutdownJobs()
             {
                 try
                 {
                    IScheduler sched = schedulerFactory.GetScheduler();
                    if (!sched.IsShutdown)
                     {
                         sched.Shutdown();
                    }
                 }
                 catch (Exception e)
                 {
                     throw new Exception(e.Message);
                }
            }  
             #endregion
     
         }

    调用方法也很简单

    1 QuartzManager<MyJob>.addJob(jobnName, cronExpress, dictionary);
    2 
    3 QuartzManager<MyJob>.startJobs();
  • 相关阅读:
    剑指 Offer——13. 调整数组顺序使奇数位于偶数前面
    剑指 Offer——3. 从尾到头打印链表
    剑指 Offer——2. 替换空格
    剑指 Offer——1. 二维数组中的查找
    LeetCode 905. Sort Array By Parity 按奇偶校验排列数组
    LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素
    SSH 代码笔记
    anaconda3安装caffe
    opencv多版本安装
    人脸文章与数据库
  • 原文地址:https://www.cnblogs.com/ywcz060/p/4191800.html
Copyright © 2011-2022 走看看