Quartz.Net任务调度基本用法

一、简介

Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植。

可以用它来创建简单的或复制的调度,Quartz.NET主要包括:调度器Scheduler,任务IJobDetail,触发器ITrigger。

官方地址:Download Quartz.NET | Quartz.NET

二、使用方式简介

1.引用Quartz.dll。

第一次使用的2.5.0版本的,有多个定时执行任务,其中有一个不执行,后面都换用2.3.1版本。

2.定义定时任务。

例如自定义类MyJob需要实现IJob接口。在void Execute(IJobExecutionContext context)这个接口方法的实现中,调用业务逻辑。

另外在MyJob中为当前任务创建一个任务调度初始化并启动任务的方法,在调度器初始化时调用,例如代码如下 

    public class MyJob : IJob
    {
        /// <summary>
        /// 任务名称
        /// </summary>
        public static string JobName { get { return "MyJob"; } }

        /// <summary>
        /// 任务触发器名称
        /// </summary>
        public static string JobTriggerName { get { return "MyJobTrigger"; } }

        /// <summary>
        /// 触发时间表达式
        /// </summary>
        public static string CronExpression { get { return JobConfig.CronExpression(JobName); } }
        /// <summary>
        /// IJob接口实现
        /// </summary>
        /// <param name="context"></param>
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                MyJobBuisiness bll = new MyJobBuisiness();
                bll.Backup();
            }
            catch (Exception ex)
            {
                //记录Job运行日志
                LogText.OprLog("备份执行异常,异常原因:" + ex.Message);
            }
        }

        /// <summary>
        /// 任务配置初始化并调用
        /// </summary>
        public static void Execute(IScheduler scheduler)
        {
            try
            {
                //初始化任务
                IJobDetail job = JobBuilder.Create<MyJob>().WithIdentity(JobName).Build();
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity(JobTriggerName)
                    .ForJob(JobName)
                    .WithSchedule(CronScheduleBuilder.CronSchedule(CronExpression))
                    .Build();
                //开始启动任务
                scheduler.ScheduleJob(job, trigger);
                

            }
            catch (Exception ex)
            {
                //启动备份任务失败
                throw ex;
                //记录任务调度异常日志
            }
        }
    }

3.任务配置

本例使用Xml文档来配置任务调度时间表达式,当然你也可以使用其他方式配置时间表达式。也可以在任务初始化时,直接设置任务执行时间或间隔。

<?xml version="1.0" encoding="utf-8" ?>
<Jobs>
  <!--节点属性说明 IsEnabled(0:未启用,1:启用) CronExpression:任务触发器时间配置表达式 -->
  <BackupJob IsEnabled="1" CronExpression="0 25 14 * * ?">备份任务</BoxCodeBackupJob>
</Jobs>

4.任务调度

对任务调度的管理,

    public class JobManager
    {
        private ISchedulerFactory schedulerFactory;
        private IScheduler scheduler;

        /// <summary>
        /// 初始化
        /// </summary>
        public JobManager()
        {
            schedulerFactory = new StdSchedulerFactory();
            scheduler = schedulerFactory.GetScheduler();
        }

        /// <summary>
        /// 运行所有任务
        /// </summary>
        /// <param name="scheduler"></param>
        private void ExecuteJobs(IScheduler scheduler)
        {
            new MyJob().Execute(scheduler);
            new MyJob2().Execute(scheduler);
        }

        #region 启动

        /// <summary>
        /// Job调度程序开始
        /// </summary>
        public void Start()
        {
            try
            {
                scheduler.Start();
                ExecuteJobs(scheduler);
            }
            catch (Exception ex)
            {
                LogText.OprLog("Job调度程序启动错误:"+ ex.Message);
                //throw ex;
            }
        }

        #endregion

        #region 终止

        /// <summary>
        /// Job调度程序停止[强行停止]
        /// </summary>
        public void Stop()
        {
            try
            {
                if (scheduler != null) scheduler.Shutdown();
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        /// <summary>
        /// Job调度程序停止[等当前运行的Job完成再停止]
        /// </summary>
        /// <param name="isWaitForJobsToComplete"></param>
        public void Stop(bool isWaitForJobsToComplete)
        {
            try
            {
                if (scheduler != null) scheduler.Shutdown(isWaitForJobsToComplete);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region 暂停

        /// <summary>
        /// Job调度程序暂停
        /// </summary>
        public void Pause()
        {
            try
            {
                scheduler.PauseAll();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region 恢复

        /// <summary>
        /// Job调度程序由挂起状态恢复
        /// </summary>
        public void Resume()
        {
            try
            {
                scheduler.ResumeAll();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Quartz.NET是一款开源的任务调度框架,可以用于在.NET应用程序中调度作业(Job)和触发器(Trigger)。下面是一个简单的Quartz.NET入门用法: 1. 安装Quartz.NET 可以通过NuGet包管理器来安装Quartz.NET,或者从官网下载源代码并编译。 2. 创建JobJob类是一个实现了IJob接口的类,可以在其中定义具体的作业逻辑。例如: ``` public class MyJob : IJob { public async Task Execute(IJobExecutionContext context) { // 在这里实现具体的作业逻辑 Console.WriteLine("Hello, Quartz.NET!"); } } ``` 3. 创建Trigger Trigger是用于定义作业执行的时间和频率的对象。可以根据需求选择不同的Trigger类型。例如,以下是一个简单的Trigger: ``` ITrigger trigger = TriggerBuilder.Create() .WithIdentity("myTrigger", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(10) .RepeatForever()) .Build(); ``` 上述代码创建了一个简单的Trigger,它会立即开始执行,并且每隔10秒重复一次。 4. 创建Scheduler Scheduler是任务调度框架的核心对象,它负责管理所有作业和触发器,以及执行调度任务。可以通过以下代码来创建一个Scheduler: ``` ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = await schedulerFactory.GetScheduler(); ``` 5. 将Job和Trigger注册到Scheduler中 在创建了Job和Trigger之后,需要将它们注册到Scheduler中,以便Quartz.NET能够管理它们。例如: ``` JobDetailImpl jobDetail = new JobDetailImpl("myJob", typeof(MyJob)); await scheduler.ScheduleJob(jobDetail, trigger); ``` 上述代码将MyJob类注册为一个作业,并将上述创建的Trigger与该作业关联起来。 6. 启动Scheduler 最后,需要启动Scheduler以开始执行作业。例如: ``` await scheduler.Start(); ``` 现在,Quartz.NET就会执行MyJob作业,并根据Trigger定义的时间和频率重复执行。当然,这只是Quartz.NET的入门用法Quartz.NET还有很多高级功能和配置选项,可以根据具体需求进行使用和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值