mvc配合Quartz完成定时作业
Quartz.NET
是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
Quartz他的作用比如:定时发邮件,定时记录日志。。。。等等
Quartz安装 NuGet-------Quartz 和CrystalQuartz.Remote(这个是一个远程管理 也就是可视化操作)

quuartz实现过程:
1:要定时完成的事情 继承并实现IJob接口 Execute 方法中写你要做的事情
我这里是定时记录日志信息
/// <summary> /// 要执行的任务 /// </summary> public class AddLog : IJob { public void Execute(IJobExecutionContext context) { LogManager.GetLogger("info").Info("Quartz定时任务测试"); } }
2.定义好触发器,如:每周五下午3点记录一条日志。。。
我这里是测试,每五秒记录一条
/// <summary> /// 任务触发器 /// 一个人任务对应一个触发器 /// </summary> public class AddLogTrigger { public ITrigger addLogTrigger() { var Trigger = TriggerBuilder.Create().WithIdentity("添加日志", "触发器").WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()).Build(); return Trigger; } }
3.顶一个创建作业的方法
/// <summary> /// 创建作业 /// </summary> /// <typeparam name="T"></typeparam> public class JobCreate<T> where T : IJob { public string JobName { get; set; } public string JobGroup { get; set; } public IJobDetail CrateJob() { ////创建一个作业,JobName 代表你要执行的这个任务的名称。 JobGroup任务分组 IJobDetail job1 = JobBuilder.Create<T>().WithIdentity(JobName, JobGroup).Build(); return job1; } }
4.定义好Quartz的线程配置,远程配置等。以及绑定Job和Trigger的方法
/// <summary> /// Quartz 的配置 /// 线程配置 远程配置等 /// </summary> public class JobBase { public static IScheduler Scheduler { get { var properties = new NameValueCollection(); // 设置线程池 properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; //设置线程池的最大线程数量 properties["quartz.threadPool.threadCount"] = "5"; //设置作业中每个线程的优先级 properties["quartz.threadPool.threadPriority"] = ThreadPriority.Normal.ToString(); // 远程输出配置 properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz"; properties["quartz.scheduler.exporter.port"] = "2001"; //配置端口号 properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler"; properties["quartz.scheduler.exporter.channelType"] = "tcp"; //协议类型 //创建一个工厂 var schedulerFactory = new StdSchedulerFactory(properties); //启动 var scheduler = schedulerFactory.GetScheduler(); return scheduler; } } public static void AddSchedule<T>(JobCreate<T> jobServer, ITrigger trigger, string jobName, string jobGroup) where T : IJob { //绑定trigger和job jobServer.JobName = jobName; jobServer.JobGroup = jobGroup; Scheduler.ScheduleJob(jobServer.CrateJob(), trigger); } }
5.定义一个方法来启动调度和绑定作业和触发器
public class Job { public static void State() { //开启调度 JobBase.Scheduler.Start(); // 第一个参数是你要执行的工作(job) 第二个参数是这个工作所对应的触发器(Trigger)(例如:几秒或几分钟执行一次) JobBase.AddSchedule(new JobCreate<AddLog>(), new AddLogTrigger().addLogTrigger(), "每五秒钟添加一个测试日志", "消息"); } }
然后在网站全局配置文件Global.asax
下的Application_Start注册并开启定时任务 Job.State();
可视化操作:
安装完CrystalQuartz.Remote 在web.config下会多两句配置文件

SchedulerHost 对应的端口号和远程名称 都要对应上方代码中配置的端口号和名称 PS:这里的端口号不要和IIS中项目的端口号一致,否则冲突。
然后启动项目 地址栏加上/CrystalQuartzPanel.axd

然后看一下我们的日志是否记录了

OK

浙公网安备 33010602011771号