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();
  • 相关阅读:
    docker stats
    Appium 环境搭建
    docker 进入容器
    Mac下Mysql启动异常["ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)"]
    python 虚拟环境--virtualenv
    visjs 绘图 图标 动态添加数据
    js 滑块登录验证
    js iframe 最顶层显示
    转化为数组
    videojs双击全屏幕观看,videojs动态加载视频
  • 原文地址:https://www.cnblogs.com/ywcz060/p/4191800.html
Copyright © 2011-2022 走看看