Quartz.Net实现定时任务调度

本文介绍了Quartz.Net——一个强大的C#作业调度框架的基本概念和应用实例。通过MVC项目演示了如何创建和配置定时任务,包括自定义作业、触发器及任务调度流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Quartz.Net介绍:
Quartz一个开源的作业调度框架,OpenSymphony的开源项目。Quartz.Net 是Quartz的C#移植版本。

它一些很好的特性:

  1. 支持集群,作业分组,作业远程管理。
  2. 自定义精细的时间触发器,使用简单,作业和触发分离。
  3. 数据库支持,可以寄宿Windows服务,WebSite,winform等。

基础概念:

  1. Scheduler     作业度器。
  2. IJob             作业接口。 继承并实现Execute, 编写执行的具体作业逻辑。
  3. JobBuilder       根据设置,生成一个详细作业信息(JobDetail)。
  4. TriggerBuilder   根据规则,生产对应的Trigger

应用:

  1. 创建mvc项目,并通过nuget获取Quartz的类库
  2. 封装任务工厂
    /// <summary>
    /// 任务工厂
    /// </summary>
    /// <typeparam name="T">工作类</typeparam>
    /// <param name="DetailName">工作名称</param>
    /// <param name="TriggerName">触发器名称</param>
    /// <param name="Minute">多长时间出发一次</param>
    private static void JobsFactory<T>(string DetailName, string TriggerName, int Minute)
        where T : IJob
    {
        //工厂1
        ISchedulerFactory factory = new StdSchedulerFactory();
    
        //启动
        IScheduler scheduler = factory.GetScheduler();
        scheduler.Start();
    
        //描述工作
        IJobDetail jobDetail = new JobDetailImpl(DetailName, null, typeof(T));
    
        //触发器
        ISimpleTrigger trigger = new SimpleTriggerImpl(TriggerName,
            null,
            DateTime.Now,
            null,
            SimpleTriggerImpl.RepeatIndefinitely,
            TimeSpan.FromSeconds(Minute));
    
        //执行
        scheduler.ScheduleJob(jobDetail, trigger);
    }
  3. 创建工作内容并实现Ijob的接口
     public class CancleOrderJob : IJob
        {
            B_Order_ConfrimCancelInfoManager manager = new B_Order_ConfrimCancelInfoManager();
            public void Execute(IJobExecutionContext context)
            {
                log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
                var list = manager.GetAllHandleOrder();
                if (list != null)
                {
                    foreach (var item in list)
                    {
                        if (item.GHandleTime < DateTime.Now)
                        {
                            try
                            {
                                manager.UpdateStatus(item.ID);
                            }
                            catch (Exception e)
                            {
                                logger.Error(e.Message);
                                throw;
                            }
    
                        }
                    }
                }
            }
        }
  4. 在global中启动任务:
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        //自动取消订单
        JobsFactory<CancleOrderJob>("CancleOrderDetial", "CancleOrderTrigger", 1000);
        //自动完成订单
        JobsFactory<CompleteOrderJob>("CompleteOrderDetial", "CompleteOrderTrigger", 1000);
    }
    注意:这里用到了log4.net记录错误日志

 

参考 https://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html

转载于:https://my.oschina.net/u/200350/blog/886724

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值