zoukankan      html  css  js  c++  java
  • Quartz.Net与MVC结合定时任务

    1.首先,我们打开Visual Studio 2015,创建一个ASP.NET MVC的Web应用程序项目。

    2.然后通过程序包管理器控制台来安装Quartz.Net组件。

    Quartz.Net一个最简单任务至少包括三部分实现:job(作业),trigger(触发器)以及scheduler(调度器)。

    其中job 是你需要在一个定时任务中具体执行的业务逻辑,trigger则规定job何时并按照何种规则执行,最终job和trigger会被注册到 scheduler(调度器)中,scheduler负责协调job和trigger的运行。

    3.创建Job类

     public class ReportJob : IJob
      {
        public void Execute(IJobExecutionContext context)//必须实现IJob接口下的Execute方法
        {
          var reportDirectory = string.Format("~/reports/{0}/", DateTime.Now.ToString("yyyy-MM"));
          reportDirectory = System.Web.Hosting.HostingEnvironment.MapPath(reportDirectory);
          if (!Directory.Exists(reportDirectory))
          {
            Directory.CreateDirectory(reportDirectory);
          }
          var dailyReportFullPath = string.Format("{0}report_{1}.log", reportDirectory, DateTime.Now.Day);
          var logContent = string.Format("{0}==>>{1}{2}", DateTime.Now, "create new log.", Environment.NewLine);
          File.AppendAllText(dailyReportFullPath, logContent);
        }
      }

    4.创建触发器trigge

     public class ReportJobScheduler
        {
            public static void Start()
            {
                IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //从工厂中获取一个调度器实例化
                scheduler.Start();   //开始调度器
                IJobDetail job = JobBuilder.Create<ReportJob>().Build();//创建一个作业
                ITrigger trigger = TriggerBuilder.Create()
                    .WithSimpleSchedule(t =>
                    t.WithIntervalInSeconds(5) //触发执行,5s一次
                    .RepeatForever())          //重复执行
                    .Build();
                scheduler.ScheduleJob(job,trigger);       //把作业,触发器加入调度器。 
            }
        }

    5.把这个任务放到项目程序的全局cs文件(Global.asax)的Application_Start方法中来执行.

     protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                //在这里调用
                ReportJobScheduler.Start();
            }

    6.之后启动网站,便会发现网站的根目录下有定时任务产生的文件和文件夹

    7.这只是个简单的例子,参照http://www.cnblogs.com/bobositlife/p/aspnet-mvc-csharp-quartz-net-timer-task-scheduler.html,这篇博客做的实验。

    本实验源代码:https://git.oschina.net/sdadx/Quartz.Net/tree/master/

    休对故人思故国 且将新火试新茶 诗酒趁年华
  • 相关阅读:
    一本通1273货币系统(方案数背包)
    背包体积循环正序和逆序的区别
    Python字典的底层原理和优缺点
    Linux各目录及每个目录的详细介绍
    openwrt 下python程序后台运行,并将打印信息保存文件
    pycharm同一目录下无法import其他文件
    python sqlite3学习笔记
    python sqlite3查询表记录
    Pycharm快捷键的使用
    Python3 Address already in use 解决方法
  • 原文地址:https://www.cnblogs.com/sdadx/p/6102017.html
Copyright © 2011-2022 走看看