关于Quartz定时任务,简单示例

1、Quartz简介:
      Quartz.NET是一个强大开源轻量作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
      官网网址:http://www.quartz-scheduler.net/
      官网示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html
2、Quartz的安装:
     直接在项目或者引用右键 =》“管理NuGet程序包” =》“浏览” 输入 =》“Quartz” 点击=》“安装”。
3、Quartz的使用:
     下面我们创建一个简单的示例:
     打开Visual Studio 2017(我用的是17版的vs哦),点击 “文件” =》“新建” =》点击 “项目”
在这里插入图片描述
选择 “已安装” =》 选择 “Visual C#” =》选择 “Web” =》选择“ASP.NET Web 应用程序” =》点击“确定” =》选择一个MVC模板就可以了:
在这里插入图片描述
在这里插入图片描述
在线安装Quartz包:
在这里插入图片描述
在这里插入图片描述
先在Modle文件夹里面新建一个“MyJob.cs”类:
在这里插入图片描述
直接上代码了:

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

namespace QuartzByDemo.Models
{
    public class MyJob : IJob
    {
        /// <summary>
        /// 必须实现“IJob”类的接口
        /// </summary>
        /// <param name="context"></param>
        public void Execute(IJobExecutionContext context)
        {
            System.IO.File.AppendAllText(@"C:/myProject/LogInfo/QuartzLog.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n 来了!老弟。\n");
        }
    }
}

     双击进入“Global.asax”文件:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Quartz;
using Quartz.Impl;

namespace QuartzByDemo
{
    public class MvcApplication : System.Web.HttpApplication
    {
        private IScheduler schoeduler;
        private ISchedulerFactory factory;
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            factory = new StdSchedulerFactory();
            schoeduler = factory.GetScheduler();
            schoeduler.Start();

            //创建一个任务
            IJobDetail job = JobBuilder.Create<Models.MyJob>().WithIdentity("job1", "group1").Build();
            //获取系统设置的任务执行时间
            string cronExpression = ConfigurationManager.AppSettings["CronSchedule"].ToString();
            //创建一个任务触发器
            ITrigger trigger = TriggerBuilder.Create()
                                           .WithIdentity("trigger1", "group1")
                                           .WithCronSchedule(cronExpression)
                                           .Build();
            //将任务与触发器添加到调度中去
            schoeduler.ScheduleJob(job, trigger);
            //开始执行
            schoeduler.Start();
        }
    }
}

最终效果:
在这里插入图片描述
4、IIS应用程序池自动回收问题的有效解决办法:
       问题详情:
       IIS可以设置定时自动回收,默认回收是1740分钟,也就是29小时。IIS自动回收相当于服务器IIS重启,应用程序池内存清空,所有数据被清除,相当于IIS重启,在度量快速开发平台服务器端,为了减小数据库负担,内存中暂存了很多信息,不适合频繁的回收,因为回收会造成服务器端所有存在内存中的数据丢失,如果没有及时保存到数据库中,可能导致程序出现问题。而如果系统使用高峰时期,并不适合回收,回收可能导致几十秒IIS无响应,对于正在工作的人员来说,是一种很不好的体验,会以为是网络或者掉线等问题。
       如果IIS重启则Global.asax中的方法将被再次执行,如果不想IIS自动重启可以使用如下的设置:
       IIS应用程序池回收,找到相应的应用程序池并点击高级设置,就可以看到回收的相关设置。
在这里插入图片描述
**发生配置更改时禁止回收:**如果为True,应用程序池在发生配置更改时将不会回收。

**固定时间间隔(分钟):**超过设置的时间后,应用程序池回收,为0意味着应用程序池不会按固定间隔回收。系统默认设置的时间是1740(29小时)。

**禁用重叠回收:**如果为true,将发生应用程序池回收,以便在创建另一个工作进程之前退出现有工作进程。

**请求限制:**应用程序池在回收之前可以处理的最大请求数。如果值为0,则表示应用程序池可以处理的请求数没有限制。

**生成回收事件日志条目:**每发生一次指定的回收事件时便产生一个事件日志条目。
到这儿就结束了!具体的示例请查看这个网址

猜你喜欢

转载自blog.csdn.net/qq_42773229/article/details/88556069