runliuv

runliuv@cnblogs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

c# .net framework 4.5.2 , Quartz.NET 3.0.7

 

参考了:https://www.cnblogs.com/personblog/p/11277527.html

https://www.jianshu.com/p/b8e7e4deb60a

 

.NET MVC 中的示例:

ReportJob.cs

 

using Quartz;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace Quartz研究.MyJob.GetWxQdSubMchId
{
    [DisallowConcurrentExecution]
    public class ReportJob : IJob
    {

        public Task Execute(IJobExecutionContext context)
        {

            return Task.Run(() =>
            {

                foo();

            });

        }


        public void foo()
        {
            try
            {
                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);

            }
            catch (Exception ex)
            {
                //日志
            }

        }


    }
}

 

 

--

ReportJobScheduler.cs

 

using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Quartz研究.MyJob.GetWxQdSubMchId
{
    public class ReportJobScheduler
    {
        /// <summary>
        /// 创建计划任务
        /// </summary>
        public static async void Start()
        {

            try
            {
                string thisJob = "ReportJob";

                string groupName = "gp"+ thisJob;
                string jobName = "job" + thisJob;
                string triggerName = "trigger" + thisJob;

                // 创建作业调度池
                ISchedulerFactory factory = new StdSchedulerFactory();
                IScheduler scheduler = await factory.GetScheduler();

                // 创建作业
                IJobDetail job = JobBuilder.Create<ReportJob>()
                  .WithIdentity(jobName, groupName)
                  .Build();

                // 创建触发器,每10s执行一次
                ITrigger trigger = TriggerBuilder.Create()
                  .WithIdentity(triggerName, groupName)
                  .StartNow()
                  .WithSimpleSchedule(x => x
                    .WithIntervalInSeconds(10)
                    .RepeatForever())
                  .Build();

                // 加入到作业调度池中
                await scheduler.ScheduleJob(job, trigger);

                // 开始运行
                await scheduler.Start();
            }
            catch (Exception ex)
            {
                //日志
            }

        }

    }
}

 

 

--

Application_Start()

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace Quartz研究
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {

            Quartz研究.MyJob.GetWxQdSubMchId.ReportJobScheduler.Start();

            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

 

 

 如果在日志里遇到:

DEBUG 2022-06-28 12:31:55,332 708ms [5] JobRunShell Log - Trigger instruction : NoInstruction
DEBUG 2022-06-28 12:31:55,349 725ms [3] QuartzSchedulerThread Log - Batch acquisition of 0 triggers
DEBUG 2022-06-28 12:32:22,653 28028ms [3] QuartzSchedulerThread Log - Batch acquisition of 0 triggers

 

或是发现任务没启动。

不要在 ReportJobScheduler 类里写额外静态方法,把静态方法移走。

--

 

posted on 2019-12-03 14:02  runliuv  阅读(873)  评论(0编辑  收藏  举报