博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz.Net实现定时任务调度
阅读量:4623 次
发布时间:2019-06-09

本文共 3607 字,大约阅读时间需要 12 分钟。

 

Quartz.Net介绍:

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

它一些很好的特性:

1:支持集群,作业分组,作业远程管理。 

2:自定义精细的时间触发器,使用简单,作业和触发分离。

3:数据库支持,可以寄宿Windows服务,WebSite,winform等。

基础概念:

   Scheduler     作业度器。

   IJob             作业接口。 继承并实现Execute, 编写执行的具体作业逻辑。

  JobBuilder       根据设置,生成一个详细作业信息(JobDetail)。

  TriggerBuilder   根据规则,生产对应的Trigger

应用:

1创建mvc项目,并通过nuget获取Quartz的类库

2封装任务工厂

///         /// 任务工厂        ///         /// 
工作类
/// 工作名称 /// 触发器名称 /// 多长时间出发一次 private static void JobsFactory
(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;                        }                    }                }            }        }    }

在global中启动任务:

protected void Application_Start()        {            AreaRegistration.RegisterAllAreas();            WebApiConfig.Register(GlobalConfiguration.Configuration);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);            RouteConfig.RegisterRoutes(RouteTable.Routes);            BundleConfig.RegisterBundles(BundleTable.Bundles);            //自动取消订单            JobsFactory
("CancleOrderDetial", "CancleOrderTrigger", 1000); //自动完成订单 JobsFactory
("CompleteOrderDetial", "CompleteOrderTrigger", 1000); //加载日志的配置文件 log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config"))); }

注意:这里用到了log4.net记录错误日志

log4.net记录错误日志的使用方法:

1应用log4.net的类库

2编写配置文件

3在global中读取配置文件的信息

//加载日志的配置文件            log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config")));

4使用:

log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);logger.Error(e.Message);

转载于:https://www.cnblogs.com/zxtceq/p/8286877.html

你可能感兴趣的文章
Zookeeper要安装在奇数个节点,但是为什么?
查看>>
discuz 微社区安装记录
查看>>
[BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数
查看>>
配置的热更新
查看>>
MySQL事务的开启与提交,autocommit自动提交功能
查看>>
PriorityQueue
查看>>
CODEVS1403 新三国争霸
查看>>
iOS 环信离线推送
查看>>
WPFTookit Chart 高级进阶
查看>>
雷云Razer Synapse2.0使用测评 -第二次作业
查看>>
django上传文件
查看>>
CVPR2013-papers
查看>>
PHP之时间函数
查看>>
Python open()完整参数
查看>>
django里面DTL使用for循环时,获取当前循环次数使用{{forloop.counter}}
查看>>
Java基础——Java集合(二)
查看>>
详解如何让Android UI设计性能更高效
查看>>
使用KNN算法对鸢尾花数据集进行分类处理
查看>>
java排序-按照实体的多种属性值进行排序(ComparableComparator/ComparatorChain)
查看>>
Django模板语言
查看>>