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、时间配置:
表达式 | 说明 |
---|---|
0 0 12 * * ? | 每天中午12点触发 |
0 15 10 ? * * | 每天上午10:15触发 |
0 15 10 * * ? | 每天上午10:15触发 |
0 15 10 * * ? * | 每天上午10:15触发 |
0 15 10 * * ? 2019 | 2019年的每天上午10:15触发 |
0 * 14 * * ? | 在每天下午2点到下午2:59期间的每1分钟触发 |
0 0/5 14 * * ? | 在每天下午2点到下午2:55期间的每5分钟触发 |
0 0/5 14,18 * * ? | 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 |
0 0-5 14 * * ? | 在每天下午2点到下午2:05期间的每1分钟触发 |
0 10,44 14 ? 3 WED | 每年三月的星期三的下午2:10和2:44触发 |
0 15 10 ? * MON-FRI | 周一至周五的上午10:15触发 |
0 15 10 15 * ? | 每月15日上午10:15触发 |
0 15 10 L * ? | 每月最后一日的上午10:15触发 |
0 15 10 L-2 * ? | 每个月的第二天到最后一天的上午10:15触发 |
0 15 10 ? * 6L | 每月的最后一个星期五上午10:15触发 |
0 15 10 ? * 6L | 每个月最后一个星期五上午10时15分触发 |
0 15 10 ? * 6L 2002-2005 | 2002年至2005年的每月的最后一个星期五上午10:15触发 |
0 15 10 ? * 6#3 | 每月的第三个星期五上午10:15触发 |
0 0 12 1/5 * ? | 每月每隔5天下午12点(中午)触发, 从每月的第一天开始 |
0 11 11 11 11 ? | 每11月11日上午11时11分触发 |
5、IIS应用程序池自动回收问题的有效解决办法:
问题详情:
IIS可以设置定时自动回收,默认回收是1740分钟,也就是29小时。IIS自动回收相当于服务器IIS重启,应用程序池内存清空,所有数据被清除,相当于IIS重启,在度量快速开发平台服务器端,为了减小数据库负担,内存中暂存了很多信息,不适合频繁的回收,因为回收会造成服务器端所有存在内存中的数据丢失,如果没有及时保存到数据库中,可能导致程序出现问题。而如果系统使用高峰时期,并不适合回收,回收可能导致几十秒IIS无响应,对于正在工作的人员来说,是一种很不好的体验,会以为是网络或者掉线等问题。
如果IIS重启则Global.asax中的方法将被再次执行,如果不想IIS自动重启可以使用如下的设置:
IIS应用程序池回收,找到相应的应用程序池并点击高级设置,就可以看到回收的相关设置。
**发生配置更改时禁止回收:**如果为True,应用程序池在发生配置更改时将不会回收。
**固定时间间隔(分钟):**超过设置的时间后,应用程序池回收,为0意味着应用程序池不会按固定间隔回收。系统默认设置的时间是1740(29小时)。
**禁用重叠回收:**如果为true,将发生应用程序池回收,以便在创建另一个工作进程之前退出现有工作进程。
**请求限制:**应用程序池在回收之前可以处理的最大请求数。如果值为0,则表示应用程序池可以处理的请求数没有限制。
**生成回收事件日志条目:**每发生一次指定的回收事件时便产生一个事件日志条目。
到这儿就结束了!具体的示例请查看这个网址
目标的实现建立在我要成功的强烈愿望上。