合肥.Net培训
达内合肥.net培训中心

0551-64632511

热门课程

实现定时任务调度

  • 时间:2017-07-28 15:23
  • 发布:合肥.NET培训
  • 来源:企业面试题

定时任务不但服务器可以实现现在的很多的功能可以实现了,今天我们就一起来看一篇合肥达内.net培训的老师的关于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封装任务工厂


 /// <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;
                        }
                    }
                }
            }
        }
    }

在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);
            //加载日志的配置文件
            log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config")));
        }
注意:这里用到了log4.net记录错误日志


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

 

1应用log4.net的类库

 

2编写配置文件

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,     log4net"/>
  </configSections>
 <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log//error_"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="yyyy-MM-dd".log""/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d - %m%n"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>

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

预约申请免费试听课程

         

上一篇:asp.net 4.0 使用log4net记录错误日志例子
下一篇:实现柱状图/线状图实例

一个小笔试题在NET上的不同表现

面试net基础知识点汇总

如何做组件化

选择城市和中心
贵州省

广西省

海南省