Quartz.NET的簡單任務管理類

昨天使用Quartz.NET作了個定時任務的功能,並實現了多個定時任務的功能ui

下面這個類實現了以下功能:spa

一、對定時任務進行管理code

二、建立定時任務,須要給定時任務一個job的名稱blog

三、判斷給定的job的任務是否已存在string

四、中止定時任務的功能 it

namespace MyUKD.Quartz
{
    /// <summary>
    /// QuartzSchedule管理
    /// </summary>
    public class QuartzSchedulerMgr
    {
        private static ISchedulerFactory schedulerFactory;
        private static IScheduler scheduler;
 
        static QuartzSchedulerMgr()
        {
            schedulerFactory = new StdSchedulerFactory();
            scheduler = schedulerFactory.GetScheduler();
            scheduler.Start();
        }
 
        /// <summary>
        /// 獲取Scheduler
        /// </summary>
        /// <returns></returns>
        public static IScheduler GetScheduler()
        {
            return scheduler;
        }
 
        /// <summary>
        /// 建立一個任務
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jobName"></param>
        /// <param name="intervalInSeconds"></param>
        /// <param name="repeatCount"></param>
        /// <returns></returns>
        public static DateTimeOffset CreateJob<T>(string jobName, int intervalInSeconds, int repeatCount) where T : IJob
        {
 
            IJobDetail job = JobBuilder.Create<T>().WithIdentity(jobName, $"{jobName}-JobGroup").Build();
 
            ITrigger trigger = TriggerBuilder.Create().WithIdentity(jobName, $"{jobName}-TriggerGroup").StartNow()
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(intervalInSeconds).WithRepeatCount(repeatCount))
                .Build();
 
            return scheduler.ScheduleJob(job, trigger);
        }
 
        /// <summary>
        /// 建立一個任務
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jobName"></param>
        /// <param name="intervalInSeconds"></param>
        /// <param name="repeatCount"></param>
        /// <param name="dataMap"></param>
        /// <returns></returns>
        public static DateTimeOffset CreateJob<T>(string jobName, int intervalInSeconds, int repeatCount,
            JobDataMap dataMap) where T : IJob
        {
 
            IJobDetail job = JobBuilder.Create<T>().WithIdentity(jobName, $"{jobName}-JobGroup").UsingJobData(dataMap)
                .Build();
 
            ITrigger trigger = TriggerBuilder.Create().WithIdentity(jobName, $"{jobName}-TriggerGroup").StartNow()
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(intervalInSeconds).WithRepeatCount(repeatCount))
                .Build();
 
            return scheduler.ScheduleJob(job, trigger);
        }
 
        /// <summary>
        /// 建立一個任務
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jobName"></param>
        /// <param name="cronTime"></param>
        /// <param name="dataMap"></param>
        /// <returns></returns>
        public static DateTimeOffset CreateJob<T>(string jobName, string cronTime, JobDataMap dataMap) where T : IJob
        {
 
            IJobDetail job = JobBuilder.Create<T>().WithIdentity(jobName, $"{jobName}-JobGroup").UsingJobData(dataMap)
                .Build();
 
 
            ICronTrigger trigger = new CronTriggerImpl(jobName, $"{jobName}-TriggerGroup", cronTime);
 
 
            return scheduler.ScheduleJob(job, trigger);
        }
 
        /// <summary>
        /// 中止執行的job,並刪除此job
        /// </summary>
        /// <param name="jobName"></param>
        /// <returns></returns>
        public static bool UnscheduleJob(string jobName)
        {
            JobKey existKey = JobKey.Create(jobName, $"{jobName}-JobGroup");
            TriggerKey exisTriggerKey = new TriggerKey(jobName, $"{jobName}-TriggerGroup");
 
            scheduler.PauseJob(existKey);
            return scheduler.UnscheduleJob(exisTriggerKey) && scheduler.DeleteJob(existKey);
 
        }
 
        /// <summary>
        /// 是否存在相關名稱的Job
        /// </summary>
        /// <param name="jobName"></param>
        /// <returns></returns>
        public static bool ExistJob(string jobName)
        {
            JobKey key = JobKey.Create(jobName, $"{jobName}-JobGroup");
            return scheduler.CheckExists(key);
        }
 
    }
}
相關文章
相關標籤/搜索