一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Quartz.Net实现定时任务调度的例子

时间:2022-06-25 03:35:03 编辑:袖梨 来源:一聚教程网

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 {
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编写配置文件










ps" value="10"/>










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

热门栏目