任务调度~Quartz.net实现简单的任务调试

简介:

任务调度类似于sqlserver中的作业,即按周期性执行某个程序,代码段,或者某种服务,在JAVA环境中出现了Quartz,它可以简单的实现任务的调试,而像lucene一样,它会有对于的.net版本,Quartz.net,今天我们来做一个简单的实验,其时很简单的实验:

环境:.net4.0+mvc3

功能:每1分钟去向一个文件里写日志(当然,如果你要调用某个服务,只要让它实现IJob接口即可。

所需要的程序集

首先在WEB.Config的configuration节点里做一些必要的配置

 1   <configSections>
 2     <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
 3     <sectionGroup name="common">
 4       <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
 5     </sectionGroup>
 6   </configSections>
 7   <common>
 8     <logging>
 9       <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging">
10         <arg key="showLogName" value="true"/>
11         <arg key="showDataTime" value="true"/>
12         <arg key="level" value="INFO"/>
13         <arg key="dateTimeFormat" value="HH:mm:ss:fff"/>
14       </factoryAdapter>
15     </logging>
16   </common>
17 
18   <quartz>
19     <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/>
20 
21     <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
22     <add key="quartz.threadPool.threadCount" value="10"/>
23     <add key="quartz.threadPool.threadPriority" value="2"/>
24 
25     <add key="quartz.jobStore.misfireThreshold" value="60000"/>
26     <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
27   </quartz>

在global.asax.cs里添加调用和取消调用的代码

1         protected void Application_Start()
2         {
3            WriteLogScheduler.Instance.Start();
4         }
5 
6         protected void Application_End(object sender, EventArgs e)
7         {
8             WriteLogScheduler.Instance.Stop();
9         }

所要调用的任务,它需要实现IJob接口

 1     /// <summary>
 2     /// 要调度的功能模块
 3     /// </summary>
 4     public class WriteLogJob : IJob
 5     {
 6         public void Execute(IJobExecutionContext context)
 7         {
 8             string fileLogPath = AppDomain.CurrentDomain.BaseDirectory;
 9             string fileLogName = "TestQuartz_" + DateTime.Now.ToLongDateString() + "_log.txt";
10             FileInfo finfo = new FileInfo(fileLogPath + fileLogName);
11             using (FileStream fs = finfo.OpenWrite())
12             {
13                 //根据上面创建的文件流创建写数据流 
14                 StreamWriter strwriter = new StreamWriter(fs);
15                 //设置写数据流的起始位置为文件流的末尾 
16                 strwriter.BaseStream.Seek(0, SeekOrigin.End);
17                 //写入相关记录信息
18                 strwriter.WriteLine("发生时间: " + DateTime.Now.ToString());
19                 strwriter.WriteLine("---------------------------------------------");
20                 strwriter.WriteLine();
21                 //清空缓冲区内容,并把缓冲区内容写入基础流 
22                 strwriter.Flush();
23                 strwriter.Close();
24                 fs.Close();
25             }
26         }
27 
28     }

添加调用任务的代码,Quartz服务核心代码

 1  public class WriteLogScheduler
 2     {
 3 
 4         static ISchedulerFactory _sf = new StdSchedulerFactory();
 5         static IScheduler _sched = _sf.GetScheduler();
 6         static WriteLogScheduler _instance = null;
 7         static object lockObj = new object();
 8 
 9         /// <summary>
10         /// 线程安全的单例对象
11         /// </summary>
12         public static WriteLogScheduler Instance
13         {
14             get
15             {
16                 if (_instance == null)
17                 {
18                     lock (lockObj)
19                     {
20                         if (_instance == null)
21                         {
22                             _instance = new WriteLogScheduler();
23                         }
24                     }
25                 }
26                 return _instance;
27             }
28         }
29 
30         public void Start()
31         {
32             ILog log = LogManager.GetLogger(typeof(WriteLogScheduler));
33             DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
34             // define the job and tie it to our HelloJob class
35             IJobDetail job = JobBuilder.Create<WriteLogJob>()
36                 .WithIdentity("job1", "group1")
37                 .Build();
38             // Trigger the job to run on the next round minute
39             ITrigger trigger = TriggerBuilder.Create()
40                 .WithIdentity("trigger1", "group1")
41                 .StartAt(runTime)
42                 .Build();
43             // Tell quartz to schedule the job using our trigger
44             _sched.ScheduleJob(job, trigger);
45             _sched.Start();
46         }
47         public void Stop()
48         {
49             _sched.Shutdown(true);
50         }
51 
52     }

运行程序,即可看到结果了,下一讲,我将把XML配置信息加进来,以减少程序的松耦性。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:任务调度~Quartz.net实现简单的任务调试,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
开发框架 缓存 .NET
.NET Core 项目启动时运行定时任务
.NET Core 项目启动时运行定时任务
47 0
|
调度 Windows C#
ABP后台服务之作业调度Quartz.NET
一、简介   Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。
3414 0
|
6月前
|
调度
Quartz.NET 任务调度框架的demo实例
​ # 1、新建项目 简单实例,新建一个控制台程序 # 2、Nuget安装Quartz ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231031-52d48c93.png?x-cos-security-token=baeOYKJ0BOuKXaDG6L8qKX7pdH823CLa740df95695ddd90763a204f7cd7172afjLbyfjQS2rqYm0waz5Rlsx3p2jhWg-yj9JZ3WKDq32bpX
25 0
|
6月前
|
开发框架 .NET API
Hangfire .NET任务调度框架实例
# 1、介绍 Hangfire是一个开源的.NET任务调度框架,提供了内置集成化的控制台(后台任务调度面板),可以直观明了的查看作业调度情况。 # 2、Nuget安装 ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231031-119e3068.png?x-cos-security-token=baeOYKJ0BOuKXaDG6L8qKX7pdH823CLaaefd8181d9b33eccf4b2a2f35cd15dd7jLbyf
47 0
Hangfire .NET任务调度框架实例
|
9月前
|
开发框架 数据可视化 Java
.NET6+Quartz实现定时任务
.NET6+Quartz实现定时任务
184 0
|
消息中间件 监控 前端开发
.NET5.0和Quartz.NET开发的极简任务调度平台
一个基于.Net 5+Quartz.NET 3构建的简单、跨平台任务调度系统。系统业务简单、代码清晰,如果您只是单纯只需简单任务执行、监控、提醒这套系统就非常适合。没有多余的功能,简单扩展下基本可以满足日常需求。
132 0
.NET5.0和Quartz.NET开发的极简任务调度平台
|
存储 调度 数据库
Quartz.NET开源作业调度框架系列(三):IJobExecutionContext 参数传递
在Quartz.NET中可以用JobDataMap进行参数传递。本例用Quartz.NET的任务来定期轮询数据库表,当数据库的条目达到一定的数目后,进行预警。
1014 0
Quartz.NET开源作业调度框架系列(三):IJobExecutionContext 参数传递
|
消息中间件 存储 SQL
3分钟掌握Quartz.net分布式定时任务的姿势
长话短说,今天聊一聊分布式定时任务,我的流水账笔记: ASP.NET Core+Quartz.Net实现web定时任务 AspNetCore结合Redis实践消息队列
3分钟掌握Quartz.net分布式定时任务的姿势
|
调度
Quartz.NET开源作业调度框架系列(二):CronTrigger
CronTriggers比SimpleTrigger更加的灵活和有用,对于比较复杂的任务触发规则。
642 0
Quartz.NET开源作业调度框架系列(二):CronTrigger
|
XML 调度 数据格式
Quartz.NET开源作业调度框架系列(四):Plugin Job
Quartz.NET提供了插件技术,可以通过在XML文件中对Job和Trigger的参数进行配置,然后定期去加载配置文件来实例化任务和Trigger。
853 0
Quartz.NET开源作业调度框架系列(四):Plugin Job