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);